Поздравил.
Итак, я запускаю Fedora Core 8 на Amazon EC2. Я установил httpd, php5 и libcurl и кучу других вещей. Казалось, что он работает отлично, но потом я понял, что данные POST не отправляются зависанием в моих php-скриптах. Тот же запрос в командной строке работает tho. Я также запускал те же сценарии php на своей локальной машине (Win XP) и другой удаленной машине (Ubuntu), и они работают нормально, данные POST отправляются, но не на FC8. Требуется ли какая-либо специальная конфигурация? Какие-либо проблемы с файерволом?
Вот код PHP:
error_reporting(E_ALL); $ch = curl_init("http://foller.me/tmp/postdump.php"); curl_setopt ($ch, CURLOPT_POST, true); curl_setopt ($ch, CURLOPT_POSTFIELDS, "something=somewhere"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_NOBODY, 0); $response = curl_exec($ch); echo $response; curl_close($ch);
Вот соответствующая команда curl:
curl -d "something=somethingelse" http://foller.me/tmp/postdump.php
Я также нашел соответствующую запись в apache error_log, и вот что я придумал:
* About to connect() to foller.me port 80 (#0) * Trying 75.101.138.148... * connected * Connected to foller.me (75.101.138.148) port 80 (#0) > GET /tmp/postdump.php HTTP/1.1 Host: foller.me Accept: */* < HTTP/1.1 200 OK < Date: Tue, 07 Jul 2009 10:32:18 GMT < Server: Apache/2.2.9 (Fedora) < X-Powered-By: PHP/5.2.6 < Content-Length: 31 < Connection: close < Content-Type: text/html; charset=UTF-8 < * Closing connection #0
Данные POST не отправляются, см.? Есть идеи?
Спасибо заранее всем. ~ K.
Похоже, что это вызывает запрос POST для GET:
curl_setopt($ch, CURLOPT_NOBODY, 0);
Удалите эту строку, и она работает.
CURLOPT_NOBODY
Параметр, отличный от нуля, указывает библиотеке, что она не включает в себя часть тела. Это относится только к протоколам, которые имеют отдельные части заголовка и тела.
Не специалист в этой области, но у меня есть собственный рабочий код, который работает несколько иначе. Может быть, это поможет
// Open the cURL session $curlSession = curl_init(); // Set the URL curl_setopt ($curlSession, CURLOPT_URL, $url);
Сначала он curl_init () устанавливает URL-адрес, а затем …
$rawresponse = curl_exec($curlSession);
т.е. я понятия не имею, но, возможно, установление URL-адреса после того, как оно имеет какое-то значение …?
Также видел этот пост, где он предлагает отправлять почтовые поля в виде массива вместо строки