Erreur «CURLE_OUT_OF_MEMORY» lors de la publication via https
Question
J'essaie d'écrire une application qui utilise libCurl pour poster des demandes soap sur un service Web sécurisé. Cette application Windows est basée sur la version 7.19.0 de libCurl, qui à son tour est construite sur openssl-0.9.8i. Le code pertinent lié à curl suit:
FILE *input_file = fopen(current->post_file_name.c_str(), "rb"); FILE *output_file = fopen(current->results_file_name.c_str(), "wb"); if(input_file && output_file) { struct curl_slist *header_opts = 0; CURLcode rcd; header_opts = curl_slist_append(header_opts, "Content-Type: application/soap+xml; charset=utf8"); curl_easy_reset(curl_handle); curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1); curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, output_file); curl_easy_setopt(curl_handle, CURLOPT_READDATA, input_file); curl_easy_setopt(curl_handle, CURLOPT_URL, fs_service_url); curl_easy_setopt(curl_handle, CURLOPT_POST, 1); curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, header_opts); rcd = curl_easy_perform(curl_handle); if(rcd != 0) { current->curl_result = rcd; current->curl_error = curl_easy_strerror(rcd); } curl_slist_free_all(header_opts); }
Lorsque j'essaie d'exécuter l'URL, curl renvoie une erreur CURLE_OUT_OF_MEMORY qui semble être liée à un échec de l'allocation d'un contexte SSL. Quelqu'un d'autre a-t-il déjà rencontré ce problème?
La solution 2
Après un examen approfondi, j'ai constaté que cette erreur était due à un échec d'initialisation de la bibliothèque openSSL en appelant SSL_library_init ().
Autres conseils
J'ai eu le même problème, je pensais simplement ajouter la remarque selon laquelle au lieu d'appeler directement l'exportation OpenSsl, SSL_library_init peut être corrigé en ajoutant l'indicateur CURL_GLOBAL_SSL à curl_global_init
J'ai rencontré le même problème après la mise à niveau vers Ubuntu 16.04, comme décrit dans cette réponse . La solution consistait à utiliser TLS comme tel.
curl_easy_setopt(curl_, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2));
Apparemment, SSLv3 a été désactivé sur Ubuntu 16.04.