@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);
  • Вопрос задан
  • 2644 просмотра
Решения вопроса 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();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы