tutorial setopt opt example easy c++ curl https openssl

c++ - setopt - Error "CURLE_OUT_OF_MEMORY" al publicar a través de https



libcurl tutorial (3)

Estoy intentando escribir una aplicación que usa libCurl para publicar solicitudes de jabón en un servicio web seguro. Esta aplicación de Windows está construida contra libCurl versión 7.19.0 que, a su vez, está construida contra openssl-0.9.8i. El siguiente código relacionado al curl es el siguiente:

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); }

Cuando intento ejecutar la URL, Curl devuelve un error CURLE_OUT_OF_MEMORY que parece estar relacionado con un error al asignar un contexto SSL. ¿Alguien más ha tenido este problema antes?


Después de una investigación más profunda, descubrí que este error se debía a una falla al inicializar la biblioteca de openSSL al llamar a SSL_library_init ().


Tuve el mismo problema, solo pensé en agregar la nota que en lugar de llamar a la exportación de OpenSsl SSL_library_init directamente, puede corregirse agregando el indicador CURL_GLOBAL_SSL a curl_global_init


Encontré el mismo síntoma después de actualizar a Ubuntu 16.04 como se describe en esta respuesta . La solución fue Usar TLS como tal.

curl_easy_setopt(curl_, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2));

Aparentemente SSLv3 estaba deshabilitado en Ubuntu 16.04.