urllib2未使用设置的代理(Fiddler2),即ProxyHandler
我在使用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)不一致。
有几个可能的解决办法:
- 可以设置
urllib.proxy_bypass = lambda h: 0
来禁用绕过检查。 - 在
http_proxy
环境变量中指定代理设置(在这种情况下,proxy_bypass_registry
不会被调用)。 - 在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。告诉我哪一个对你有效……