如何使用 WinINet 通过代理连接到 HTTPS
Posted
技术标签:
【中文标题】如何使用 WinINet 通过代理连接到 HTTPS【英文标题】:How to connect to HTTPS via proxy with WinINet 【发布时间】: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 方法?
【问题讨论】:
【参考方案1】:您需要在您的HttpOpenRequestW
调用中添加INTERNET_FLAG_SECURE
标志,例如这里:
HINTERNET hRequest = HttpOpenRequestW(hConnect, NULL, L"", NULL, NULL, NULL, INTERNET_FLAG_SECURE, 0);
显然,您这边的应用程序代码需要识别您是在处理 HTTP 还是 HTTPs,并且仅在需要时添加此标志。
【讨论】:
以上是关于如何使用 WinINet 通过代理连接到 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章