使用 urllib2 进行代理
- 2025-01-21 09:01:00
- admin 原创
- 83
问题描述:
我使用以下命令打开网址:
site = urllib2.urlopen('http://google.com')
我想要做的是以同样的方式与某个地方的代理进行连接,它告诉我:
site = urllib2.urlopen('http://google.com', proxies={'http':'127.0.0.1'})
但那也不起作用。
我知道 urllib2 有类似代理处理程序的东西,但我记不起那个功能了。
解决方案 1:
proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')
解决方案 2:
您必须安装 ProxyHandler
urllib2.install_opener(
urllib2.build_opener(
urllib2.ProxyHandler({'http': '127.0.0.1'})
)
)
urllib2.urlopen('http://www.google.com')
解决方案 3:
您可以使用环境变量设置代理。
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')
解决方案 4:
要使用默认系统代理(例如来自 http_support 环境变量),以下内容适用于当前请求(无需将其全局安装到 urllib2 中):
url = 'http://www.example.com/'
proxy = urllib2.ProxyHandler()
opener = urllib2.build_opener(proxy)
in_ = opener.open(url)
in_.read()
解决方案 5:
除了接受的答案之外:我的脚本给了我一个错误
File "c:Python23lib/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:
如果我们想使用代理访问网页,也可以使用请求。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]>
解决方案 7:
另外,为命令行会话设置代理打开您可能想要运行脚本的命令行
netsh winhttp set proxy YourProxySERVER:yourProxyPORT
在该终端运行你的脚本。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD