gpt4 book ai didi

ssl - 使用 WinHTTP 通过 CONNECT 和 POST 发送用户代理?

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:31 24 4
gpt4 key购买 nike

我正在尝试使用 WinHttp 发布到安全站点,但遇到了 User-Agent header 未与 CONNECT 一起发送的问题。

我正在使用来自 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。这有效,但是当我检查代理日志时,用户代理字符串(“WinHTTP AutoProxy Sample/1.0”)没有作为 CONNECT 的一部分发送。但是,它作为 POST 的一部分发送。

有人能告诉我如何更改此代码以在 CONNECT 和 POST 期间发送 User-Agent header 吗?

编辑添加:我们只在 Windows 7 上观察到这个问题。如果我们在 Windows Vista 机器上运行相同的代码,我们可以看到 User-Agent在 CONNECT 上发送 header 。

最佳答案

Duncan-- 根据 WinHTTP 团队的说法,这是 Windows 7 中引入的行为更改。目前,WinHTTP 中没有针对此问题的解决方法。

关于ssl - 使用 WinHTTP 通过 CONNECT 和 POST 发送用户代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2396554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com