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