Ошибка "CURLE_OUT_OF_MEMORY" при публикации через https

Я пытаюсь написать приложение, которое использует libCurl для публикации запросов на мыло в защищенный веб-сервис. Это приложение Windows построено на libCurl версии 7.19.0, которая, в свою очередь, построена на openssl-0.9.8i. Соответствующий код связан с curl следующим образом:

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

Когда я пытаюсь выполнить URL, curl возвращает ошибку CURLE_OUT_OF_MEMORY, которая, по-видимому, связана с ошибкой выделения контекста SSL. Кто-нибудь еще сталкивался с этой проблемой раньше?

3 ответа

Решение

После дальнейшего изучения я обнаружил, что эта ошибка была из-за сбоя при инициализации библиотеки openSSL путем вызова SSL_library_init().

У меня была такая же проблема, я просто подумал добавить примечание, что вместо непосредственного вызова экспорта OpenSsl SSL_library_init это можно исправить, добавив флаг CURL_GLOBAL_SSL в curl_global_init

Я столкнулся с тем же симптомом после обновления до Ubuntu 16.04, как описано в этом ответе. Решение было использовать TLS, как это.

curl_easy_setopt(curl_, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2));

Очевидно, SSLv3 был отключен в Ubuntu 16.04.

Другие вопросы по тегам