Error "CURLE_OUT_OF_MEMORY" al publicar a través de https
Pregunta
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á diseñada contra la versión 7.19.0 de libCurl que, a su vez, está diseñada contra openssl-0.9.8i. El código relacionado con el rizo pertinente 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 una falla al asignar un contexto SSL. ¿Alguien más ha encontrado este problema antes?
Solución 2
Después de una investigación adicional, descubrí que este error se debió a un error al inicializar la biblioteca openSSL llamando a SSL_library_init ().
Otros consejos
Tuve el mismo problema, solo pensé en agregar la nota de que en lugar de llamar a la exportación de OpenSsl SSL_library_init directamente, se puede solucionar 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 así.
curl_easy_setopt(curl_, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2));
Aparentemente SSLv3 estaba deshabilitado en Ubuntu 16.04.