Эта проблема/quirk/побочный эффект сводит меня с ума. В нижней части кода код ответа HTTP-взаимодействия передается по ссылке в responseCode_. Однако он часто появляется как 0, хотя в противном случае сайт может быть обращен к нему и возвращается слишком быстро, чтобы быть таймаутом.C++ libcurl http-код ошибки ответа
Все переменные определены, код ниже - всего лишь фрагмент метода C++ в классе , Любые переменные var_ основаны на экземплярах. Он работает на нескольких потоках, но это не должно быть проблемой. Каждый класс, использующий libcurl, имеет свой собственный экземпляр для соответствующих потоков.
Заранее спасибо за любые идеи или советы ...
CURL *curl;
curl = curl_easy_init();
//The URL
curl_easy_setopt(curl, CURLOPT_URL, url.getURLString().c_str());
//Timeout
curl_easy_setopt(curl, CURLOPT_TIMEOUT, &timeout_);
//disable signals to use with threads
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
//Redirecting
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 5);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
//Writing callback
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, &writerh);
curl_easy_setopt(curl, CURLOPT_HEADERDATA, &head_);
//Writing callback
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &writerb);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &body_);
//Headers
struct curl_slist *headers = NULL;
for (std::map<std::string, std::string>::iterator itr = requestHeaders_.begin(); itr != requestHeaders_.end(); itr++) {
std::stringstream header;
header << itr->first << ": " << itr->second;
headers = curl_slist_append(headers, header.str().c_str());
}
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
//UA
curl_easy_setopt(curl, CURLOPT_USERAGENT, "RDFaS-Bot/1.0 (+http://www.rdfas.com/bot)");
curl_easy_perform(curl); /* ignores error */
//Response code
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &responseCode_);
//clean headers
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
Update:
curl_easy_perform
не возвращался CURLE_OK, когда код ответа был 0, как объясняет отмеченный ответ. Однако отладочные крючки очень полезны и отличное предложение