& # 8220; CURLE_OUT_OF_MEMORY & # 8221; errore durante la pubblicazione tramite https
Domanda
Sto tentando di scrivere un'applicazione che utilizza libCurl per inviare richieste soap a un servizio Web sicuro. Questa applicazione Windows è costruita contro libCurl versione 7.19.0 che, a sua volta, è costruita su openssl-0.9.8i. Segue il codice relativo all'arricciatura pertinente:
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); }
Quando tento di eseguire l'URL, curl restituisce un errore CURLE_OUT_OF_MEMORY che sembra essere correlato a un errore nell'allocare un contesto SSL. Qualcun altro ha riscontrato questo problema prima?
Soluzione 2
Dopo ulteriori indagini, ho scoperto che questo errore era dovuto a un errore nell'inizializzazione della libreria openSSL chiamando SSL_library_init ().
Altri suggerimenti
Ho avuto lo stesso problema, ho pensato di aggiungere la nota che invece di chiamare direttamente l'esportazione OpenSsl SSL_library_init può essere risolto aggiungendo il flag CURL_GLOBAL_SSL a curl_global_init
Ho riscontrato lo stesso sintomo dopo l'aggiornamento a Ubuntu 16.04 come descritto in questa risposta . La soluzione era usare TLS in questo modo.
curl_easy_setopt(curl_, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2));
Apparentemente SSLv3 è stato disabilitato su Ubuntu 16.04.