خطأ "CURLE_OUT_OF_MEMORY" عندما نشر عبر HTTPS
سؤال
وأنا محاولة لكتابة تطبيق يستخدم يبكورل للنشر طلبات الصابون لخدمة الويب الآمنة. تم بناء هذا التطبيق ويندوز ضد يبكورل نسخة 7.19.0 الذي، بدوره، هو مبني على بينسل-0.9.8i. رمز ذات الصلة حليقة المتعلقة يلي:
<اقتباس فقرة>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، حليقة بإرجاع خطأ CURLE_OUT_OF_MEMORY التي يبدو أن لها صلة إلى عدم تخصيص السياق SSL. وقد أي شخص آخر واجهت هذه المشكلة من قبل؟
المحلول 2
وبعد إجراء مزيد من التحقيق، وجدت أن هذا الخطأ كان بسبب عدم التهيئة مكتبة OpenSSL بالدعوة SSL_library_init ().
نصائح أخرى
وكان لي نفس المشكلة، بس كنت أضيف ملاحظة أنه بدلا من استدعاء تصدير بينسل SSL_library_init مباشرة يمكن ان تكون ثابتة عن طريق إضافة CURL_GLOBAL_SSL العلم <لأ href = "http://curl.haxx.se /libcurl/c/curl_global_init.html">curl_global_init
وأنا واجهت نفس الأعراض بعد الترقية إلى أوبونتو 16.04 كما هو موضح في هذه الإجابة . وكان الحل لاستخدام TLS مثل ذلك.
curl_easy_setopt(curl_, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2));
وعلى ما يبدو كان أنظمة SSLv3 المعوقين على أوبونتو 16.04.