Pergunta

Eu estou tentando escrever um aplicativo que usa libcurl aos pedidos pós SOAP para um serviço web seguro. Este aplicativo do Windows é construído contra CURL versão 7.19.0, que, por sua vez, é construído contra openssl-0.9.8i. O código de onda relacionado pertinente seguinte:

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

Quando tento executar o URL, retorna onda um erro CURLE_OUT_OF_MEMORY que parece estar relacionado a uma falha para alocar um contexto SSL. Tem mais alguém encontrou este problema antes?

Foi útil?

Solução 2

Depois de uma investigação mais aprofundada, descobri que este erro foi devido a uma falha para inicializar a biblioteca OpenSSL chamando SSL_library_init ().

Outras dicas

Eu tive o mesmo problema, só pensei em adicionar a nota que, em vez de chamar o SSL_library_init OpenSSL exportar diretamente ele pode ser corrigido através da adição do CURL_GLOBAL_SSL bandeira para curl_global_init

Eu encontrei o mesmo sintoma após a atualização para o Ubuntu 16.04, conforme descrito no esta resposta . A solução foi usar TLS assim.

curl_easy_setopt(curl_, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2));

Aparentemente SSLv3 foi desativado no Ubuntu 16.04.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top