Ошибка "CURLE_OUT_OF_MEMORY" при публикации через https - PullRequest
5 голосов
/ 03 октября 2008

Я пытаюсь написать приложение, которое использует 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 ]

8 голосов
/ 07 апреля 2011

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

3 голосов
/ 03 октября 2008

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

0 голосов
/ 19 мая 2016

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

curl_easy_setopt(curl_, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2));

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...