urllib2未使用设置的代理(Fiddler2),即ProxyHandler

3 投票
4 回答
4651 浏览
提问于 2025-04-16 20:41

我在使用Fiddler2,监听地址是0.0.0.0:8888。

try:
    data = '' 
    proxy = urllib2.ProxyHandler({'http': '127.0.0.1:8888'})  //also tried {'http': 'http://127.0.0.1:8888/'}
    opener = urllib2.build_opener(proxy)
    urllib2.install_opener(opener)
    req = urllib2.Request('http://www.google.com')
    response = urllib2.urlopen(req)
    the_page = response.read()
        print the_page
except Exception, detail:
    print "Err ", detail

我在Fiddler里没有看到对谷歌的GET请求或其他请求(但我能看到其他请求)。有没有什么办法可以调试一下?感觉像是Python绕过了Fiddler,或者不使用代理。

我也配置了WinHTTP来和Fiddler一起工作 -

C:\Windows\system32>netsh winhttp set proxy 127.0.0.1:8888

Current WinHTTP proxy settings:

    Proxy Server(s) :  127.0.0.1:8888
    Bypass List     :  (none)

请求是SSL地址的话,这个有影响吗?(Fiddler支持https)

谢谢!

4 个回答

2

在Fiddler2中,找到页面 工具 -> Fiddler选项 ... -> 连接,把 IE应该绕过Fiddler的... 这个字段里的最后一个分号去掉,然后重启Fiddler2。

这个方法对我用urllib2代理的时候确实有效,不过我还是不明白为什么去掉最后的分号就能解决问题。

3

在urllib.py中,proxy_bypass_registry这个功能没有正确处理ProxyOverride这个注册表值:它把空的覆盖设置当成*,也就是说,会对所有主机都绕过代理。这种行为和其他程序(比如Chrome)不一致。

有几个可能的解决办法:

  1. 可以设置urllib.proxy_bypass = lambda h: 0来禁用绕过检查。
  2. http_proxy环境变量中指定代理设置(在这种情况下,proxy_bypass_registry不会被调用)。
  3. 在Fiddler2中,进入工具->Fiddler选项...->连接,去掉“IE应该绕过Fiddler的...”字段值末尾的分号,然后重启Fiddler2。
4

也许你可以直接使用打开器,而不是安装它。先在8008端口上开启你的Fiddler代理监听(我用的是WebScarab,但它们可能差不多),然后试试这段代码(里面有一些你不需要的cookies,但我们先照原样试试,之后再逐步缩小范围):

cj = cookielib.MozillaCookieJar(cookie_filename)
if os.access(cookie_filename, os.F_OK):
    cj.load()
proxy_handler = urllib2.ProxyHandler({'https': 'localhost:8008'})
opener = urllib2.build_opener(
        proxy_handler,
        urllib2.HTTPCookieProcessor(cj)
    )
opener.addheaders = [
        ('User-agent', ('Mozilla/4.0 (compatible; MSIE 6.0; '
                       'Windows NT 5.2; .NET CLR 1.1.4322)'))
    ]
auth = urllib.urlencode({'email':email,'pass':passw})
data = opener.open('https://login.facebook.com/login.php',data=auth)

所以,我做的不同之处是:直接使用打开器,把端口改成8008,添加cookies,并使用WebScarab。告诉我哪一个对你有效……

撰写回答