2008-10-03 16 views
5

Estoy intentando escribir una aplicación que utiliza libCurl para publicar solicitudes de jabón a 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 código relacionado rizo pertinente sigue:"CURLE_OUT_OF_MEMORY" error al publicar a través de https

 
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, curvatura devuelve un error CURLE_OUT_OF_MEMORY que parece estar relacionado con una falta de asignación de un contexto SSL. ¿Alguien más ha tenido este problema antes?

Respuesta

3

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

8

he tenido el mismo problema, sólo que me gustaría añadir la nota que en lugar de llamar a la exportación OpenSSL SSL_library_init directamente se puede fijar mediante la adición de la bandera CURL_GLOBAL_SSL a curl_global_init

0

me encontré con el mismo síntoma después de actualizar a Ubuntu 16.04 como se describe en this answer. La solución fue Usar TLS como tal.

curl_easy_setopt(curl_, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2)); 

Al parecer SSLv3 was disabled en Ubuntu 16.04.

Cuestiones relacionadas