1
我正在嘗試使用WinHttp發佈到安全站點,並且遇到了User-Agent頭未與CONNECT一起發送的問題。通過CONNECT發送用戶代理並用WinHTTP POST?
我使用的是輕修改後的代碼示例從MSDN:
HINTERNET hHttpSession = NULL;
HINTERNET hConnect = NULL;
HINTERNET hRequest = NULL;
WINHTTP_AUTOPROXY_OPTIONS AutoProxyOptions;
WINHTTP_PROXY_INFO ProxyInfo;
DWORD cbProxyInfoSize = sizeof(ProxyInfo);
ZeroMemory(&AutoProxyOptions, sizeof(AutoProxyOptions));
ZeroMemory(&ProxyInfo, sizeof(ProxyInfo));
hHttpSession = WinHttpOpen(L"WinHTTP AutoProxy Sample/1.0",
WINHTTP_ACCESS_TYPE_NO_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS,
0);
if(!hHttpSession)
goto Exit;
hConnect = WinHttpConnect(hHttpSession,
L"server.com",
INTERNET_DEFAULT_HTTPS_PORT,
0);
if(!hConnect)
goto Exit;
hRequest = WinHttpOpenRequest(hConnect, L"POST", L"/resource", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, WINHTTP_FLAG_SECURE);
if(!hRequest)
goto Exit;
WINHTTP_PROXY_INFO proxyInfo;
proxyInfo.dwAccessType = WINHTTP_ACCESS_TYPE_NAMED_PROXY;
proxyInfo.lpszProxy = L"192.168.1.2:3199";
proxyInfo.lpszProxyBypass = L"";
WinHttpSetOption(hHttpSession,
WINHTTP_OPTION_PROXY,
&proxyInfo,
sizeof(proxyInfo));
WinHttpSetCredentials(hRequest, WINHTTP_AUTH_TARGET_PROXY, WINHTTP_AUTH_SCHEME_BASIC, L"proxyuser", L"proxypass", NULL);
if(!WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, "content", 7, 7, 0))
{
goto Exit;
}
if(!WinHttpReceiveResponse(hRequest, NULL))
goto Exit;
/* handle result */
Exit:
if(ProxyInfo.lpszProxy != NULL)
GlobalFree(ProxyInfo.lpszProxy);
if(ProxyInfo.lpszProxyBypass != NULL)
GlobalFree(ProxyInfo.lpszProxyBypass);
if(hRequest != NULL)
WinHttpCloseHandle(hRequest);
if(hConnect != NULL)
WinHttpCloseHandle(hConnect);
if(hHttpSession != NULL)
WinHttpCloseHandle(hHttpSession);
這樣做是通過身份驗證的代理在192.168.1.2:3199連接到我的服務器,並進行了POST。這是有效的,但是當我檢查代理日誌時,User-Agent字符串(「WinHTTP AutoProxy Sample/1.0」)不作爲CONNECT的一部分發送。然而,它是作爲POST的一部分發送的。
有人可以告訴我如何更改此代碼,以便在期間發送User-Agent標頭 CONNECT和POST?
編輯補充:我們正在觀察這個問題只在Windows 7上如果我們運行在Windows Vista箱相同的代碼,我們可以看到CONNECT正在發送的User-Agent頭。
非常感謝。以爲我瘋了一會兒:-) – 2010-03-10 23:30:59
Eric,因爲我發佈了這個問題,我們不得不重新設計我們的軟件來使用HTTP而不是HTTPS,因爲我們被公司網絡中的過濾代理所拒絕,用戶代理的基礎。如果您與他們保持聯繫,請讓WinHTTP團隊知道這對我們來說是一個正確的痛苦,他們越早得到這種迴歸(對不起,行爲改變)對所有Windows開發人員來說都更好。 – 2010-03-15 13:33:06
Duncan:您應聯繫Microsoft支持部門(http://support.microsoft.com)並獲取相關案例;這是獲得微軟發佈修補程序的途徑。由於這是我們行爲的改變,應該免除支持費用。 – EricLaw 2010-03-15 17:23:31