时间:2011-07-02 00:02:45

标签: python proxy urllib2 fiddler

我有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或google的任何请求(但我可以看到其他请求) 有没有办法调试它?似乎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 个答案:

答案 0 :(得分:4)

也许你可以直接使用开启者而不是安装它。在8008打开你的fiddler代理监听器(我正在使用WebScarab,但它们可能是相同的)然后准确地尝试这个代码(也有你不需要的cookie,但让我们试着按原样缩小它以后缩小它):

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,添加cookie并使用WebScarab。让我知道其中哪一个为你做了诀窍......

答案 1 :(得分:2)

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 for ...”字段中的值中删除尾随分号,然后重新启动Fiddler2。

答案 2 :(得分:2)

在Fiddler2中,转到页面工具 - >提琴手选项...... - >连接,从 IE中的值中删除尾随分号应绕过Fiddler for ... 字段并重新启动Fiddler2。

当我使用urllib2代理时,这个解决方案绝对适用于我,但我仍然不明白为什么删除尾随分号可以解决它。

答案 3 :(得分:1)

顺便说一句,你需要使用http://www.google.com/代替http://www.google.com,以便小提琴手可以确定你要求'get /'

否则小提琴手无法弄清楚uri。 (你可能会收到504接收失败)。