簡體   English   中英

更改請求協議 restsdk

[英]Changing request protocol restsdk

所以我想在使用其余 sdk 發出請求時添加對所有協議的支持。 這是 Windows 支持的默認協議:

默認情況下,Windows 7 和 Windows 8 中僅啟用 SSL3 和 TLS1。默認情況下,Windows 8.1 和 Windows 10 中僅啟用 SSL3、TLS1.0、TLS1.1 和 TLS1.2。

在創建請求之前,我設置了一個 http_client_config 並為 set_nativehandle_options 創建了一個回調,如下所示:

std::function<void(web::http::client::native_handle)> get_callback()
{
    auto func = [&](const web::http::client::native_handle handle)
    {
        std::cout << "handle: " << std::hex << handle << std::endl;
        DWORD secure_protocols = WINHTTP_FLAG_SECURE_PROTOCOL_ALL;
        if (!WinHttpSetOption(handle, WINHTTP_OPTION_SECURE_PROTOCOLS, &secure_protocols, sizeof(secure_protocols)))
        {
            std::cout << "Can not set WINHTTP_FLAG_SECURE_PROTOCOL_ALL" << std::endl;
            std::cout << std::dec << GetLastError() << std::endl;
        }
        else
            std::cout << "Set WINHTTP_FLAG_SECURE_PROTOCOL_ALL" << std::endl;
    };

    return func;
}

所以基本上問題是 WinHttpSetOption 總是返回 ERROR_INTERNET_INCORRECT_HANDLE_TYPE。 不幸的是,這與網站上的聲明相矛盾:

native_handle 是以下類型,具體取決於底層平台:Windows 桌面、WinHTTP - HINTERNET Windows 運行時、WinRT - IXMLHTTPRequest2 *....

我發現了一個解決這個問題的github 問題,但它似乎從未得到解決。

也許任何人都知道可能出了什么問題。

好吧,好像這個功能剛剛壞了。 我剛剛連接了 WinHttpOpen,它返回了我應該使用的句柄,並且該函數工作得很好。

這應該可以正常工作

web::http::client::http_client_config GetHttpConfig()
{
    web::http::client::http_client_config config;
    
    auto func = [&](web::http::client::native_handle handle) {
        HINTERNET hSession = WinHttpOpen(L"TestApp",
            WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
            WINHTTP_NO_PROXY_NAME,
            WINHTTP_NO_PROXY_BYPASS, 0);

        DWORD secure_protocols = WINHTTP_FLAG_SECURE_PROTOCOL_ALL;

        if (!WinHttpSetOption(hSession, WINHTTP_OPTION_SECURE_PROTOCOLS, &secure_protocols, sizeof(secure_protocols)))
        {
            std::cout << "Can not set WINHTTP_FLAG_SECURE_PROTOCOL_ALL" << std::endl;
            std::cout << std::dec << GetLastError() << std::endl;
        }
        else
        {
            std::cout << "Set WINHTTP_FLAG_SECURE_PROTOCOL_ALL" << std::endl;
            handle = hSession;
        }        
    };

    config.set_nativehandle_options(func);
    return config;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM