php curl пост запрос - PullRequest
       15

php curl пост запрос

0 голосов
/ 27 августа 2011

Я написал этот код для отправки почтового запроса

$ch = curl_init("http://www.exemple.com");
curl_setopt($ch, CURLOPT_COOKIE, "PHPSESSID=32chars; prsess_******=32chars; login_******=55chars");
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, array("type" => "1"));
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: application/x-www-form-urlencoded; charset=UTF-8"));
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$page = curl_exec($ch);
print $head = curl_getinfo($ch, CURLINFO_HEADER_OUT);}
curl_close($ch);

Но я получаю это в качестве заголовка

POST / HTTP/1.1
User-Agent: Mozilla/5.0 ...
Host: www.exemple.com
Accept: */*
Referer: http://www.exemple.com/page.php
Cookie: PHPSESSID=32chars; prsess_******=32chars; login_******=55chars
Content-Length: 140
Expect: 100-continue
Content-type: application/x-www-form-urlencoded; charset=UTF-8; boundary=----------------------------0636ec3c1d17

Может кто-нибудь сказать мне, почему type=1 нет в списке?

Ответы [ 3 ]

6 голосов
/ 27 августа 2011

Переменные POST отправляются в теле запроса, это не часть заголовков.

Тело запроса отправляется сразу после заголовков, разделенных пустой строкой.

Кстати, когда вы устанавливаете CURLOPT_POSTFIELDS в качестве массива, curl отправляет тело как multipart / form-data и соответственно устанавливает Content-Type в multipart / form-data.

Не следует устанавливать заголовок Content-Type самостоятельно, так как это нарушает запрос.

Или установите CURLOPT_POSTFIELDS в виде строки (например, http_build_query(array('type' => 1));), чтобы избежать отправки curl POST как multipart / form-data.

2 голосов
/ 27 августа 2011

Данные POST отправляются в теле запроса, а не в заголовках.

1 голос
/ 27 августа 2011

Поля POST не включены в заголовок, они включены в тело.

cURL ожидает ответа сервера с сообщением HTTP/1.1 100 Continue перед отправкой тела, поскольку оно отправилоExpect: 100-continue header.

В вашем вопросе не хватает кода?Потому что заголовок Content-Length: 140 неправильный, если его нет (должно быть 6) ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...