2011-12-15 74 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

你的方法很好。

造成速度差异的原因可能是浏览器可能缓存了您请求的页面或缓存了代理/代理凭据,并且无需执行任何网络新提取操作,就像您在代码中执行的那样。

获得代理/凭证后,您是否在应用程序内尝试过后续请求?