2008-10-03 3 views
5

Ich versuche eine Anwendung zu schreiben, die libCurl verwendet, um Soap-Anfragen an einen sicheren Web-Service zu senden. Diese Windows-Anwendung wird gegen die libCurl-Version 7.19.0 erstellt, die wiederum gegen openssl-0.9.8i erstellt wird. Die zugehörige curl bezogenen Code folgt:"CURLE_OUT_OF_MEMORY" -Fehler beim Posten über https

 
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); 
} 

Wenn ich die URL auszuführen versuchen, Locke einen CURLE_OUT_OF_MEMORY Fehler zurückgibt, die zu einem Ausfall verwandt zu sein scheint ein SSL-Kontext zuzuordnen. Ist jemand anderes schon einmal auf dieses Problem gestoßen?

Antwort

3

Nach weiteren Untersuchungen stellte ich fest, dass dieser Fehler auf einen Fehler bei der Initialisierung der OpenSSL-Bibliothek durch Aufrufen von SSL_library_init() zurückzuführen war.

8

hatte ich das gleiche Problem, dachte nur, ich die Notiz hinzufügen würde, die anstatt den OpenSSL Export Aufruf SSL_library_init es durch Hinzufügen der Flagge CURL_GLOBAL_SSL zu curl_global_init

0

angetroffen direkt fixiert werden kann ich das gleiche Symptom nach der Aktualisierung auf Ubuntu 16.04 wie in this answer beschrieben. Die Lösung bestand darin, TLS so zu verwenden.

curl_easy_setopt(curl_, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2)); 

Offenbar SSLv3 was disabled auf Ubuntu 16.04.