@furyon

Как эмулировать запрос FormData из PHP?

Здравствуйте!

К примеру на сайте есть код
form = new FormData();
form.append('cmd', 'getUsers');
form.append('id', '2');
$.ajax({
    processData: false,
    contentType: false,
    type: 'POST',
    url: "/ajax.php",
    data: form,
    success: function (data) {
        ...
    }
});


Не могу понять как сделать такой-же запрос через PHP. Пробовал разные варианты, например такой:
$url = 'http://.../ajax.php';
$data = 'cmd=getUsers&id=2';

$context = stream_context_create([
	'http' => [
		'method'  => 'POST',
		'header'  => [
			'Content-type: application/x-www-form-urlencoded',
		],
		'content' => $data
		]
]);
echo file_get_contents($url , FALSE, $context);
  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
  • rabbit418
    @rabbit418
    23 yo Designer from Ukraine
    Можно например так, с помощью Curl.

    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => "/ajax.php",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n",
      CURLOPT_HTTPHEADER => array(
        "content-type: multipart/form-data; boundary=---011000010111000001101001"
      ),
    ));
    
    $response = curl_exec($curl);
    $err = curl_error($curl);
    
    curl_close($curl);
    
    if ($err) {
      echo "cURL Error #:" . $err;
    } else {
      echo $response;
    }


    А еще можно вот так, с помощью HTTP v2:
    <?php
    
    $client = new http\Client;
    $request = new http\Client\Request;
    
    $body = new http\Message\Body;
    $body->addForm(array(
      'foo' => 'bar'
    ), NULL);
    
    $request->setRequestUrl('/ajax.php');
    $request->setRequestMethod('POST');
    $request->setBody($body);
    
    $client->enqueue($request)->send();
    $response = $client->getResponse();
    
    echo $response->getBody();
    Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы