& # 8220; CURLE_OUT_OF_MEMORY & # 8221; ошибка при публикации через https

StackOverflow https://stackoverflow.com/questions/166617

  •  03-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь написать приложение, которое использует 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. Кто-нибудь еще сталкивался с этой проблемой раньше?

Это было полезно?

Решение 2

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

Другие советы

У меня была та же проблема, но я решил добавить примечание, что вместо непосредственного вызова OpenSsl export 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top