Ошибка "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.