使用Python 'Requests'模块的代理
这是关于Python中非常棒的Requests模块的一个简单问题。
我在文档里找不到变量'proxies'应该包含什么内容。当我给它一个包含标准“IP:PORT”值的字典时,它拒绝了,提示需要两个值。所以,我猜(因为文档里似乎没有说明)第一个值是IP,第二个是端口,对吗?
文档里只提到这一点:
proxies – (可选)一个字典,将协议映射到代理的URL。
所以我试了这个……我该怎么做呢?
proxy = { ip: port}
我是否应该在放入字典之前将这些转换成某种类型?
r = requests.get(url,headers=headers,proxies=proxy)
12 个回答
42
我发现urllib这个库有一些很不错的代码,可以直接获取系统的代理设置,而且格式也正好可以直接使用。你可以这样用:
import urllib
...
r = requests.get('http://example.org', proxies=urllib.request.getproxies())
这个方法效果很好,urllib也能获取Mac OS X和Windows的设置。
56
你可以在这里查看代理的相关文档。
如果你需要使用代理,可以在任何请求方法中通过proxies参数来设置每个请求:
import requests
proxies = {
"http": "http://10.10.1.10:3128",
"https": "https://10.10.1.10:1080",
}
requests.get("http://example.org", proxies=proxies)
如果你想在使用代理的时候进行HTTP基本认证,可以使用这种格式:http://用户名:密码@代理地址.com/
:
proxies = {
"http": "http://user:pass@10.10.1.10:3128/"
}
445
proxies
字典的写法是 {"协议": "方案://ip:端口", ...}
。通过这个,你可以为使用 http、https 和 ftp 协议的请求指定不同的(或者相同的)代理:
http_proxy = "http://10.10.1.10:3128"
https_proxy = "https://10.10.1.11:1080"
ftp_proxy = "ftp://10.10.1.10:3128"
proxies = {
"http" : http_proxy,
"https" : https_proxy,
"ftp" : ftp_proxy
}
r = requests.get(url, headers=headers, proxies=proxies)
这个信息是从 requests
文档中得来的:
参数:
method
– 新请求对象的方法。
url
– 新请求对象的URL。
...
proxies
– (可选)字典,用于将 协议 映射到 代理的URL。
...
在Linux系统中,你也可以通过设置 HTTP_PROXY
、HTTPS_PROXY
和 FTP_PROXY
环境变量来实现:
export HTTP_PROXY=10.10.1.10:3128
export HTTPS_PROXY=10.10.1.11:1080
export FTP_PROXY=10.10.1.10:3128
在Windows系统中:
set http_proxy=10.10.1.10:3128
set https_proxy=10.10.1.11:1080
set ftp_proxy=10.10.1.10:3128