J'essaie de faire des requêtes via la bibliothèque curl de C++. Je peux avec succès faire ma demande et obtenir la réponse correcte via ligne de commande mais je ne parviens pas à obtenir la réponse correcte via Le code C++ . Ma commande en ligne de commande ressemble à ceci
curl -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' -H 'Authorization: <some_hash_value>' -k <my_full_url> -data '<my_json_string>'
Cela fonctionne bien. J'essaie maintenant de faire la même demande en code C++. Mon code ressemble à ceci
void performRequest(const std::string& json, const void* userData, CallbackFunction callback)
{
struct curl_slist* headers = NULL;
headers = curl_slist_append(headers, "Accept: application/json");
headers = curl_slist_append(headers, "Content-Type: application/json");
headers = curl_slist_append(headers, (std::string("Authorization: ") + m_authorization).c_str());
CURL* curlHandle = curl_easy_init();
if (!curlHandle)
{
std::cerr << "Curl handler initialization failed";
}
curl_easy_setopt(curlHandle, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(curlHandle, CURLOPT_HTTPHEADER, headers);
// specify target URL, and note that this URL should include a file name, not only a directory
curl_easy_setopt(curlHandle, CURLOPT_URL, m_url.c_str());
// enable uploading
curl_easy_setopt(curlHandle, CURLOPT_UPLOAD, 1L);
// set HTTP method to POST
curl_easy_setopt(curlHandle, CURLOPT_CUSTOMREQUEST, "POST");
// set json data; I use EXACTLY the same string as in command line
curl_easy_setopt(curlHandle, CURLOPT_COPYPOSTFIELDS, json.c_str());
// set data size
curl_easy_setopt(curlHandle, CURLOPT_POSTFIELDSIZE_LARGE, json.size());
// set user data for getting it in response
curl_easy_setopt(curlHandle, CURLOPT_WRITEDATA, userData); // pointer to a custom struct
// set callback function for getting response
curl_easy_setopt(curlHandle, CURLOPT_WRITEFUNCTION, callback); // some callback
// send request
curl_easy_perform(curlHandle);
curl_easy_cleanup(curlHandle);
curl_slist_free_all(headers);
}
Cependant, pour une raison quelconque, j'obtiens une erreur dans la réponse du serveur, ce qui me permet de supposer que la demande de mon code n'est pas équivalente à la commande de la ligne de commande. Il semble que le corps de la requête ne soit pas envoyé. Je ne peux pas voir le corps de ma requête Json lorsque j'utilise CURLOPT_DEBUGFUNCTION pour obtenir des informations de débogage.
Quel est le problème ici ? Qu'est-ce que je fais de mal ? Avez-vous des idées ?