autoproxy exampleを実行した後、私の要求は自分のプロキシを経由しません。WinHTTP autoproxyが動作しない
私が代わりにWINHTTP_ACCESS_TYPE_NO_PROXYのWINHTTP_ACCESS_TYPE_DEFAULT_PROXYとWinHttpOpenを呼び出した場合、それは私がWinHttpSetOption行わない場合に動作します。この時点で
if(!WinHttpSetOption(hRequest,
WINHTTP_OPTION_PROXY,
&ProxyInfo,
cbProxyInfoSize))
{
// Exit if setting the proxy info failed.
goto Exit;
}
}
を、ProxyInfoでプロキシが私のプロキシに設定され、proxybypassリストされます無効である。
私はWinHttpSetOptionが正しく動作していないのですか?
これは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));
//
// Create the WinHTTP session.
//
hHttpSession = WinHttpOpen(L"WinHTTP AutoProxy Sample/1.0",
WINHTTP_ACCESS_TYPE_NO_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS,
0);
// Exit if WinHttpOpen failed.
if(!hHttpSession)
goto Exit;
//
// Create the WinHTTP connect handle.
//
hConnect = WinHttpConnect(hHttpSession,
L"www.microsoft.com",
INTERNET_DEFAULT_HTTP_PORT,
0);
// Exit if WinHttpConnect failed.
if(!hConnect)
goto Exit;
//
// Create the HTTP request handle.
//
hRequest = WinHttpOpenRequest(hConnect,
L"GET",
L"ms.htm",
L"HTTP/1.1",
WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,
0);
// Exit if WinHttpOpenRequest failed.
if(!hRequest)
goto Exit;
//
// Set up the autoproxy call.
//
// Use auto-detection because the Proxy
// Auto-Config URL is not known.
AutoProxyOptions.dwFlags = WINHTTP_AUTOPROXY_AUTO_DETECT;
// Use DHCP and DNS-based auto-detection.
AutoProxyOptions.dwAutoDetectFlags =
WINHTTP_AUTO_DETECT_TYPE_DHCP |
WINHTTP_AUTO_DETECT_TYPE_DNS_A;
// If obtaining the PAC script requires NTLM/Negotiate
// authentication, then automatically supply the client
// domain credentials.
AutoProxyOptions.fAutoLogonIfChallenged = TRUE;
//
// Call WinHttpGetProxyForUrl with our target URL. If
// auto-proxy succeeds, then set the proxy info on the
// request handle. If auto-proxy fails, ignore the error
// and attempt to send the HTTP request directly to the
// target server (using the default WINHTTP_ACCESS_TYPE_NO_PROXY
// configuration, which the requesthandle will inherit
// from the session).
//
if(WinHttpGetProxyForUrl(hHttpSession,
L"http://www.microsoft.com/ms.htm",
&AutoProxyOptions,
&ProxyInfo))
{
// A proxy configuration was found, set it on the
// request handle.
if(!WinHttpSetOption(hRequest,
WINHTTP_OPTION_PROXY,
&ProxyInfo,
cbProxyInfoSize))
{
// Exit if setting the proxy info failed.
goto Exit;
}
}
//
// Send the request.
//
if(!WinHttpSendRequest(hRequest,
WINHTTP_NO_ADDITIONAL_HEADERS,
0,
WINHTTP_NO_REQUEST_DATA,
0,
0,
NULL))
{
// Exit if WinHttpSendRequest failed.
goto Exit;
}
//
// Wait for the response.
//
if(!WinHttpReceiveResponse(hRequest, NULL))
goto Exit;
//
// A response has been received, then process it.
// (omitted)
//
Exit:
//
// Clean up the WINHTTP_PROXY_INFO structure.
//
if(ProxyInfo.lpszProxy != NULL)
GlobalFree(ProxyInfo.lpszProxy);
if(ProxyInfo.lpszProxyBypass != NULL)
GlobalFree(ProxyInfo.lpszProxyBypass);
//
// Close the WinHTTP handles.
//
if(hRequest != NULL)
WinHttpCloseHandle(hRequest);
if(hConnect != NULL)
WinHttpCloseHandle(hConnect);
if(hHttpSession != NULL)
WinHttpCloseHandle(hHttpSession);
私はそうでなければ、プロキシを使用しない、それが利用可能な場合は、プロキシを使用したいです。 私はWindows 7 SP1で64ビットの例をテストしました。
あなたはWinHttpSetupのMethodeのに見ることができます;-) –