【问题标题】:Proxy with urllib2带有 urllib2 的代理
【发布时间】:2010-11-29 19:48:01
【问题描述】:

我打开网址:

site = urllib2.urlopen('http://google.com')

而我想做的是以同样的方式与代理连接 我在某个地方告诉我:

site = urllib2.urlopen('http://google.com', proxies={'http':'127.0.0.1'})

但这也没有用。

我知道 urllib2 有类似代理处理程序的东西,但我不记得那个功能了。

【问题讨论】:

    标签: python proxy urllib2


    【解决方案1】:

    你必须安装一个 ProxyHandler

    urllib2.install_opener(
        urllib2.build_opener(
            urllib2.ProxyHandler({'http': '127.0.0.1'})
        )
    )
    urllib2.urlopen('http://www.google.com')
    

    【讨论】:

    • 我得到文件“D:/Desktop/Desktop/mygoogl”,第 64 行,site = url.urlopen('google.com) 文件“C:\Python26\lib\urllib2.py”,第 124 行,在 urlopen 返回 _opener.open(url, data, timeout) AttributeError: ProxyHandler instance has no attribute 'open'
    • 我错过了对 urllib2.build_opener() 的调用
    【解决方案2】:
    proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
    opener = urllib2.build_opener(proxy)
    urllib2.install_opener(opener)
    urllib2.urlopen('http://www.google.com')
    

    【讨论】:

    • 嗨,@ZelluX,我只想在某些功能上启用代理设置,这是否意味着我必须为每次调用该功能安装和卸载开启器?
    • @Satoru.Logic 也许你可以写一个装饰器来简化安装/卸载过程?
    • urllib2中好像没有uninstall方法,但是我们可以做一次性代理设置;我们创建了一个request 对象,而不是installing 的开瓶器,并使用开瓶器open 它。
    • @Satoru.Logic:我认为传统的方法是配置像HTTP_PROXY 这样的环境变量,然后检查您的代码是否使用os.environ["HTTP_PROXY"] 定义。
    • 不要忘记端口号 例如 3128 proxy = urllib2.ProxyHandler({'http': '127.0.0.1:3128'})
    【解决方案3】:

    要使用默认系统代理(例如来自 http_support 环境变量),以下适用于当前请求(无需将其全局安装到 urllib2 中):

    url = 'http://www.example.com/'
    proxy = urllib2.ProxyHandler()
    opener = urllib2.build_opener(proxy)
    in_ = opener.open(url)
    in_.read()
    

    【讨论】:

      【解决方案4】:

      您可以使用环境变量设置代理。

      import os
      os.environ['http_proxy'] = '127.0.0.1'
      os.environ['https_proxy'] = '127.0.0.1'
      

      urllib2 将通过这种方式自动添加代理处理程序。您需要分别为不同的协议设置代理,否则它们将失败(就不通过代理而言),见下文。

      例如:

      proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
      opener = urllib2.build_opener(proxy)
      urllib2.install_opener(opener)
      urllib2.urlopen('http://www.google.com')
      # next line will fail (will not go through the proxy) (https)
      urllib2.urlopen('https://www.google.com')
      

      相反

      proxy = urllib2.ProxyHandler({
          'http': '127.0.0.1',
          'https': '127.0.0.1'
      })
      opener = urllib2.build_opener(proxy)
      urllib2.install_opener(opener)
      # this way both http and https requests go through the proxy
      urllib2.urlopen('http://www.google.com')
      urllib2.urlopen('https://www.google.com')
      

      【讨论】:

      • 你不应该使用例如os.environ['http_proxy'] 在你下面的两组例子中?
      【解决方案5】:

      除了接受的答案: 我的 scipt 给了我一个错误

      File "c:\Python23\lib\urllib2.py", line 580, in proxy_open
          if '@' in host:
      TypeError: iterable argument required
      

      解决办法是在代理字符串前面加上http://:

      proxy = urllib2.ProxyHandler({'http': 'http://proxy.xy.z:8080'})
      opener = urllib2.build_opener(proxy)
      urllib2.install_opener(opener)
      urllib2.urlopen('http://www.google.com')
      

      【讨论】:

        【解决方案6】:

        另外设置命令行会话的代理 打开你可能想要运行脚本的命令行

        netsh winhttp set proxy YourProxySERVER:yourProxyPORT
        

        在该终端中运行您的脚本。

        【讨论】:

          【解决方案7】:

          如果我们想使用代理访问网页,也可以使用请求。 Python 3 代码:

          >>> import requests
          >>> url = 'http://www.google.com'
          >>> proxy = '169.50.87.252:80'
          >>> requests.get(url, proxies={"http":proxy})
          <Response [200]>
          

          还可以添加多个代理。

          >>> proxy1 = '169.50.87.252:80'
          >>> proxy2 = '89.34.97.132:8080'
          >>> requests.get(url, proxies={"http":proxy1,"http":proxy2})
          <Response [200]>
          

          【讨论】:

          • 嗨@WaqarDetho 如何知道要使用哪些代理地址?它只是一些随机的IP地址吗?
          • 嗨@AmanSingh 我很久以前就做过了。但据我记得,我从互联网上找到了这些代理地址。我在代码中手动注入了它们。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-07
          • 1970-01-01
          相关资源
          最近更新 更多