我正在尝试编写一个使用 libCurl 将肥皂请求发布到安全 Web 服务的应用程序。此 Windows 应用程序是针对 libCurl 版本 7.19.0 构建的,而 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

经过进一步调查后,我发现此错误是由于无法通过调用SSL_library_init()来初始化openSSL库。

其他提示

我有同样的问题,只是想我添加注释,而不是直接调用OpenSsl导出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 上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top