Ce problème/bizarre/effet secondaire me rend fou. Près du bas, le code, le code de réponse de l'interaction HTTP est passé par référence dans responseCode_. Cependant, il apparaît souvent comme 0 même si le site peut être accédé, et revient trop vite pour être un timeout ...Problèmes avec le code de réponse http libcurl C++
Toutes les variables sont définies, le code ci-dessous est juste un extrait d'une méthode C++ dans une classe . Toutes les variables var_ sont basées sur une instance. Il fonctionne sur plusieurs threads, mais cela ne devrait pas poser de problème. Chaque classe qui utilise libcurl a sa propre instance sur les threads respectifs.
Merci à l'avance pour des idées ou des conseils ...
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);
Mise à jour:
curl_easy_perform
ne retournerait pas CURLE_OK lorsque le code de réponse était de 0, comme la réponse marquée explique. Cependant, les hooks de débogage sont très utiles et une excellente suggestion