2011-12-15 73 views
4

我試着去理解web請求代理(HttpWebRequest的或Web客戶端) 在控制面板 - > Internet選項 - > Connecitons-> LAN設置 你會看到3個選項:如何獲得代理

  1. 自動檢測設置
  2. 使用自動配置腳本
  3. 使用代理服務器爲LAN

我想,以確保無論哪個設置,我的Web請求拿起與瀏覽器相同的代理。

我正在使用下面的代碼來實現這一點;然而,當檢查1.時,我在瀏覽器和我的代碼中嘗試相同的URL,它看起來我的代碼慢得多。我想我在代碼中獲取代理的方式可能效率不高或不合適。

有什麼我可以改變我的代碼來反映瀏覽器的速度?

var client = (HttpWebRequest)WebRequest.Create(uriStr); 
    client.Headers["something"] = something; 
    client.Timeout = ConnectionTimeOut; //1 min 

    var proxyURI = WebRequest.GetSystemWebProxy().GetProxy(uri); 
    var proxy = new WebProxy(proxyURI, true) 
    { 
     Credentials = CredentialCache.DefaultNetworkCredentials 
    }; 
    //if there is no proxy, proxy will return the same uri 
    //do we need check if client.Proxy is null or not, 
    if (proxyURI != null && !string.IsNullOrEmpty(proxyURI.AbsoluteUri) && !proxy.Address.Equals(uri)) 
    { 
     client.Proxy = proxy; 
    } 
+0

在這兩種情況下使用WireShark(或Fiddler)跟蹤HTTP數據包,並比較跟蹤。 – kol 2011-12-15 16:00:26

回答

2

你的方法很好。

造成速度差異的原因可能是瀏覽器可能緩存了您請求的頁面或緩存了代理/代理憑據,並且無需執行任何網絡新提取操作,就像您在代碼中執行的那樣。

獲得代理/憑證後,您是否在應用程序內嘗試過後續請求?