http-сообщение не работает с использованием cUrl (libcurl)

Я делаю простой HTTP-запрос, используя libcurl для файла index.php на моем веб-сервере, который имеет следующий простой код, записывающий данные в файл

if (isset($_POST['abc'])){
    $log="abc.log";
    $h=fopen($log,"w");
    fwrite($h,$_POST['abc']);
    fclose($h);
}  

в то время как мой письменный код С++, реализующий HTTP-запрос, выглядит следующим образом

    CURL *curl;
    CURLcode res;
    curl=curl_easy_init();
    string url=AnsiString("http://127.0.0.1/curl/index.php?abc=123").c_str();
    string data="abc=3434";
    if (curl) {

        curl_easy_setopt(curl, CURLOPT_POST, 1);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS,AnsiString("abc=3434").c_str());
        curl_easy_setopt(curl, CURLOPT_URL,AnsiString("http://127.0.0.1/curl/index.php").c_str());
        res=curl_easy_perform(curl);
        curl_easy_cleanup(curl);
    }

Во-первых, публикация включена curl_easy_setopt(curl, CURLOPT_POST, 1);

Во-вторых, если я отлаживаю этот код, я получаю статус CURL_OK в res (возвращаемое значение), а также TCP 127.0.1:80 будет устанавливаться каждый раз, когда я запускаю мониторинг кода через netstat -ano 15, но файл abc.log пуст.

Что с этим не так?? У тебя нет идеи указать мне правильный путь?

Заранее спасибо!


person Suhrob Samiev    schedule 03.03.2012    source источник
comment
Что не так не так? Что не происходит? А как насчет файлов журнала вашего веб-сервера? Они что-нибудь показывают?   -  person Mat    schedule 03.03.2012
comment
файл abc.log пуст :(   -  person Suhrob Samiev    schedule 03.03.2012
comment
Ну, вы не устанавливаете никаких данных поста (эта часть закомментирована). Так что это ожидаемо.   -  person Mat    schedule 03.03.2012
comment
когда я меняю $_POST['abc'] на $_GET['abc'] в своем php-файле и запускаю index.php?abc=qwerty через браузер, он записывает в файл!   -  person Suhrob Samiev    schedule 03.03.2012
comment
Это не тот запрос, который вы отправляете через С++. Пожалуйста, используйте журналы вашего веб-сервера, чтобы увидеть, что именно вы отправляете со стороны C++.   -  person Mat    schedule 03.03.2012
comment
127.0.0.1 - - [03/Mar/2012:16:09:18 +0500] "GET /curl/index.php HTTP/1.1" 200 - что означает минус в конце?? На самом деле, это отправка метода GET!   -  person Suhrob Samiev    schedule 03.03.2012
comment
изменил $_POST['abc'] на $_GET['abc'], а также `curl_easy_setopt(curl,CURLOPT_HTTPGET,1); curl_easy_setopt(curl, CURLOPT_URL,AnsiString(127.0.0.1/curl/index .php?abc=23234).c_str()); ` не работает, если, скажем, отправляет запрос GET!   -  person Suhrob Samiev    schedule 03.03.2012


Ответы (1)


Отправка CURLOPT_POSTFIELDSIZE помогла!
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE,data.Length());

Журнал Apache говорит, что вы отправили POST

127.0.0.1 - - [03/Mar/2012:17:39:06 +0500] "POST /curl/post.php HTTP/1.1" 200 -

person Suhrob Samiev    schedule 03.03.2012
comment
Я пришел к мысли, что можно вообще отправить запрос POST с помощью c++, используя приведенный выше код! Большой ! - person Suhrob Samiev; 03.03.2012