【问题标题】:urllib2 doesn't use proxy (Fiddler2), set using ProxyHandlerurllib2 不使用代理(Fiddler2),使用 ProxyHandler 设置
【发布时间】:2011-07-02 00:02:45
【问题描述】:

我让 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)

谢谢!

【问题讨论】:

  • 只要确保您能够通过浏览器上的代理与 Internet 通信。您是否还设置了任何身份验证?你的代码抛出了什么异常?
  • 我看到我的浏览器发送和接收的许多请求\答案。我没有得到任何异常,代码正在运行,我只是在 fieddler 上看不到请求。有没有一种方法可以让我看到 urllib2 中发生了什么?调试它在做什么。
  • 为了检查代码是否正在使用 porxy,我已将 fieddler 更改为需要代理身份验证,并且在浏览时我必须在浏览器上使用用户\密码,再次运行 python 代码工作,所以它挑衅地不使用代理。

标签: python proxy urllib2 fiddler


【解决方案1】:

也许您可以直接使用开启器而不是安装它。在 8008 上打开您的提琴手代理侦听器(我正在使用 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。让我知道其中哪一个对你有用...

【讨论】:

    【解决方案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。

    【讨论】:

      【解决方案3】:

      在 Fiddler2 中,转到页面 Tools -> Fiddler Options ... -> Connections,从 IE 中的值中删除尾随分号应该绕过 Fiddler for ... 字段并重新启动 Fiddler2。

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

      【讨论】:

        【解决方案4】:

        顺便说一句,你需要使用 http://www.google.com/ 而不是 http://www.google.com 以便提琴手可以判断你正在请求“get /”

        否则 fiddler 无法找出 uri。 (您可能会收到 504 接收失败)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多