【问题标题】:Using urllib2 via proxy通过代理使用 urllib2
【发布时间】:2013-02-18 01:54:56
【问题描述】:

我正在尝试通过代理使用urllib2;但是,在尝试了使用urllib2 传递我的验证详细信息的几乎所有变体之后,我要么得到一个永远挂起并且什么都不返回的请求,要么得到407 Errors。我可以使用我的浏览器很好地连接到网络,该浏览器连接到 prox-pac 并相应地重定向;但是,即使我使用 prox-pac 重定向到的代理,我似乎也无法通过命令行curlwgeturllib2 等执行任何操作。我尝试使用 urllib2 将代理设置为 pac 文件中的所有代理,但均无效。

我当前的脚本如下所示:

import urllib2 as url

proxy = url.ProxyHandler({'http': 'username:password@my.proxy:8080'})
auth = url.HTTPBasicAuthHandler()
opener = url.build_opener(proxy, auth, url.HTTPHandler)
url.install_opener(opener)
url.urlopen("http://www.google.com/")

抛出HTTP Error 407: Proxy Authentication Required 我也试过了:

import urllib2 as url

handlePass = url.HTTPPasswordMgrWithDefaultRealm()
handlePass.add_password(None, "http://my.proxy:8080", "username", "password")
auth_handler = url.HTTPBasicAuthHandler(handlePass)
opener = url.build_opener(auth_handler)
url.install_opener(opener)
url.urlopen("http://www.google.com")

curlwget 一样挂起超时。

我需要做什么来诊断问题?我怎么可能通过浏览器进行连接,但不能从同一台计算机上的命令行使用看似相同的代理和凭据进行连接?

可能和路由器有关?如果是这样,它如何区分浏览器HTTP请求和命令行HTTP请求?

【问题讨论】:

    标签: python http proxy urllib2


    【解决方案1】:

    这样的挫败感促使我使用Requests。如果您正在使用 urllib2 进行大量工作,那么您真的应该检查一下。例如,要使用 Requests 执行您希望执行的操作,您可以编写:

    import requests
    from requests.auth import HTTPProxyAuth
    
    proxy = {'http': 'http://my.proxy:8080'}
    auth = HTTPProxyAuth('username', 'password')
    r = requests.get('http://wwww.google.com/', proxies=proxy, auth=auth)
    print r.text
    

    或者你可以将它包装在一个 Session 对象中,每个请求都会自动使用代理信息(而且它会自动存储和处理 cookie!):

    s = requests.Session(proxies=proxy, auth=auth)
    r = s.get('http://www.google.com/')
    print r.text
    

    【讨论】:

      猜你喜欢
      • 2015-04-15
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多