5

我正在尝试编写一个使用 libCurl 将肥皂请求发布到安全 Web 服务的应用程序。此 Windows 应用程序是针对 libCurl 版本 7.19.0 构建的,而 libCurl 版本又是针对 openssl-0.9.8i 构建的。相关curl相关代码如下:

文件 *input_file = fopen(current->post_file_name.c_str(), "rb");
文件 *output_file = fopen(current->results_file_name.c_str(), "wb");
如果(输入文件 && 输出文件)
{
    结构 curl_slist *header_opts = 0;
    CURLcode rcd;

    header_opts = curl_slist_append(header_opts, "内容类型: 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);
    如果(rcd!= 0)
    {
        当前->curl_result = rcd;
        当前->curl_error = curl_easy_strerror(rcd);
    }
    curl_slist_free_all(header_opts);
}

当我尝试执行 URL 时,curl 返回一个 CURLE_OUT_OF_MEMORY 错误,这似乎与分配 SSL 上下文失败有关。以前有没有其他人遇到过这个问题?

4

3 回答 3

8

我有同样的问题,只是想添加注释,而不是直接调用 OpenSsl 导出 SSL_library_init 它可以通过将标志 CURL_GLOBAL_SSL 添加到 curl_global_init 来修复

于 2011-04-07T11:26:24.007 回答
3

经过进一步调查,我发现这个错误是由于调用 SSL_library_init() 初始化 openSSL 库失败造成的。

于 2008-10-03T12:58:37.710 回答
0

本答案所述,升级到 Ubuntu 16.04 后我遇到了相同的症状。解决方案是像这样使用 TLS。

curl_easy_setopt(curl_, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2));

显然 SSLv3在 Ubuntu 16.04 上被禁用。

于 2016-05-19T08:08:30.490 回答