& # 8220; CURLE_OUT_OF_MEMORY & # 8221; ошибка при публикации через 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. Кто-нибудь еще сталкивался с этой проблемой раньше?
Решение 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. р>