2017-07-21 39 views
0

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ビットの例をテストしました。

答えて