php + curl не может установить метод post

Я пытаюсь сделать почтовый запрос с 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.