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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top