WinHttp を使用して安全なサイトに POST しようとしていますが、CONNECT と共に User-Agent ヘッダーが送信されないという問題が発生しています。
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 ヘッダーを送信する方法を教えてください。
編集して追加:この問題は Windows 7 でのみ確認されています。Windows Vista ボックスで同じコードを実行すると、CONNECT で User-Agent ヘッダーが送信されていることがわかります。