【问题标题】:How to connect to HTTPS via proxy with WinINet如何使用 WinINet 通过代理连接到 HTTPS
【发布时间】:2015-03-13 12:16:09
【问题描述】:

我正在尝试使用 WinINet 通过代理连接到 HTTPS 服务。我的代码如下所示:

hInternet = InternetOpenW(L"Test", INTERNET_OPEN_TYPE_PROXY,L"PROXY_IP:PROXY_PORT", L"<local>", 0);

if (hInternet == NULL)
{
    printf("InternetOpenW failed! Error code: %d\n", GetLastError());
}
else
{
    HINTERNET hConnect = InternetConnectW(hInternet, L"HTTPS_SERVICE_IP", 443, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
    if (hConnect == NULL)
    {
        printf("InternetConnectW failed! Error code: %d\n", GetLastError());
    }
    else
    {
        HINTERNET hRequest = HttpOpenRequestW(hConnect, NULL, L"", NULL, NULL, NULL, 0, 0);
        if (hRequest == NULL)
        {
            printf("HttpOpenRequestW failed! Error code: %d\n", GetLastError());
        }
        else
        {
            BOOL bRequestSent = HttpSendRequestW(hRequest, NULL, 0, NULL, 0);
            if (!bRequestSent)
            {
                printf("HttpSendRequestW failed! Error code: %d\n", GetLastError());
            }
            else
            {
                printf("Connection ok!\n");
            }

            InternetCloseHandle(hRequest);
        }

        InternetCloseHandle(hConnect);
    }

    InternetCloseHandle(hInternet);
}

向代理发送GET请求,进行ntml认证,但连接失败。代理期望客户端发送 CONNECT 请求。如何使用该代码发送 CONNECT 方法?

【问题讨论】:

    标签: c https proxy wininet


    【解决方案1】:

    您需要在您的HttpOpenRequestW 调用中添加INTERNET_FLAG_SECURE 标志,例如这里:

    HINTERNET hRequest = HttpOpenRequestW(hConnect, NULL, L"", NULL, NULL, NULL, INTERNET_FLAG_SECURE, 0);
    

    显然,您这边的应用程序代码需要识别您是在处理 HTTP 还是 HTTPs,并且仅在需要时添加此标志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-11
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      相关资源
      最近更新 更多