1

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 ヘッダーが送信されていることがわかります。

4

1 に答える 1

2

Duncan -- WinHTTP チームによると、これは Windows 7 で導入された動作上の変更です。現在、WinHTTP でこの問題を回避する方法はありません。

于 2010-03-10T17:38:23.347 に答える