Я пытаюсь сделать почтовый запрос с php и curl. Вот мой код
//PHP 5.3.5 and curl: 7.18.2 $ch = curl_init(); if(!empty($save_cookie)){ curl_setopt($ch, CURLOPT_COOKIEJAR, $save_cookie); curl_setopt($ch, CURLOPT_COOKIEFILE, $save_cookie); }else{ curl_setopt($ch, CURLOPT_COOKIE, $cookie); } curl_setopt($ch, CURLOPT_REFERER, $referer); curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); curl_setopt($ch, CURLOPT_URL, 'http://localhost/post.php'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $pars); curl_setopt($ch, CURLOPT_HEADER, $header); curl_setopt($ch, CURLOPT_NOBODY, !$body); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $postResult = curl_exec($ch); if (curl_errno($ch)) { return false; } curl_close($ch); return $postResult;
В http: //localhost/post.php , я пишу
print_r($_SERVER);
Результат возврата завитка всегда
[REQUEST_METHOD] => GET
Удалите параметр CURLOPT_NOBODY
и он будет работать. Или разместите его над линией CURLOPT_POST
.
Кажется, я столкнулся с этим однажды, пытаясь получить только заголовок ответа. настройка
curl_setopt($ch, CURLOPT_NOBODY, true);
эффективно инструктирует curl
выдавать запрос HEAD
, который не является POST
запросом. Я думаю, что нет возможности просто получить заголовок из POST
(и просто отказаться от соединения после получения заголовка). В качестве побочного эффекта установка CURLOPT_NOBODY
в false
задает тип запроса GET
…
Вам действительно нужен флаг CURLOPT_NOBODY
?
Попробуйте переместить
curl_setopt($ch, CURLOPT_NOBODY, !$body);
линии перед
curl_setopt($ch, CURLOPT_POSTFIELDS, $pars);
линия.
На странице curl / set_opt есть интересный пост, проливающий некоторый свет на это поведение:
Если ваши POST-данные, кажется, исчезают (POST-данные пусты, запрос обрабатывается сервером как GET), попробуйте переупорядочить порядок CURLOPT_POSTFIELDS с помощью CURLOPT_NOBODY. CURLOPT_POSTFIELDS должен появиться ПОСЛЕ CURLOPT_NOBODY, потому что, если это произойдет после того, как он уничтожит заголовок, который сообщает целевой URL, что запрос является POST, а не GET.