質問

libCurl を使用して SOAP リクエストを安全な Web サービスにポストするアプリケーションを作成しようとしています。この Windows アプリケーションは、libCurl バージョン 7.19.0 に対してビルドされており、libCurl バージョン 7.19.0 は openssl-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 を実行しようとすると、curl は SSL コンテキストの割り当ての失敗に関連していると思われる CURLE_OUT_OF_MEMORY エラーを返します。他にこの問題に遭遇した人はいますか?

役に立ちましたか?

解決 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