c libcurl POST не работает последовательно - PullRequest
3 голосов
/ 14 декабря 2010

Я пытаюсь отправить данные XML из программы AC с помощью libcurl на веб-сайт.Когда я использую программу командной строки в Linux, curl, как это работает нормально:

curl -X POST -H 'Тип содержимого: text / xml' -d 'my xml data' http://test.com/test.php

(я изменил фактические данные в целях безопасности)

Но как только я пытаюсь написать код на языке c использованием libcurl, он терпит неудачу почти каждый раз, но каждый раз успешно.Вот мой код c:

CURL *curl;
CURLcode res;

curl = curl_easy_init();

if(curl)
{
    curl_easy_init(curl, CURLOPT_URL, "http://test.com/test.php");
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, xmlString.c_str());
    curl_easy_perform(curl);
}

curl_easy_cleanup(curl);

У меня есть этот код в цикле, который выполняется примерно каждые 10 секунд, и он будет успешным только для каждых 4 или 5 вызовов.Я получаю сообщения об ошибках от сервера, на которых написано «Голова XML не найдена».

Я попытался указать заголовок HTTP с помощью:

struct curl_slist *chunk = NULL
chunk = curl_slist_append(chunk, "Content-type: text/xml");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);

Но мне не повезло.Есть идеи?

1 Ответ

8 голосов
/ 14 декабря 2010

Попробуйте это:

CURL *curl = curl_easy_init(); 
if(curl) 
{ 
    curl_easy_setopt(curl, CURLOPT_URL, "http://test.com/test.php"); 
    curl_easy_setopt(curl, CURLOPT_POST, 1); 
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, xmlString.c_str()); 
    curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, xmlString.length()); 
    struct curl_slist *slist = curl_slist_append(NULL, "Content-Type: text/xml; charset=utf-8"); // or whatever charset your XML is really using...
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist); 
    curl_easy_perform(curl); 
    curl_slist_free_all(slist);
    curl_easy_cleanup(curl); 
} 
...