使用urllib2的代理

78 投票
7 回答
131676 浏览
提问于 2025-04-15 14:27

我用下面的方式打开网址:

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

我想用代理以同样的方式连接。有人告诉我可以这样做:

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

但是这样也不行。

我知道urllib2有类似代理处理的功能,但我想不起来具体的函数是什么了。

7 个回答

13

你可以通过环境变量来设置代理。

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')
20

你需要安装一个代理处理器

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

在编程中,有时候我们会遇到一些问题,尤其是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,但其实大部分时候,解决这些问题的方法都很简单。

比如说,当你在写代码的时候,如果出现了错误,首先要做的就是仔细检查你的代码。看看有没有拼写错误,或者是漏掉了某些符号。很多时候,错误就藏在这些小细节里。

另外,了解你使用的工具或库的文档也是非常重要的。文档里通常会有很多示例和说明,可以帮助你更好地理解如何使用这些工具。

如果你还是解决不了问题,可以考虑去网上找一些相关的讨论,比如在StackOverflow上提问或者搜索。很多时候,别人也遇到过类似的问题,他们的解决方案可能会对你有帮助。

总之,遇到问题不要慌,慢慢来,仔细检查,善用文档和社区资源,通常都能找到解决办法。

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

撰写回答