在 Python 的 requests 库中,使用代理服务器可以让你通过不同的网络路由发送 HTTP 请求。代理服务器可以帮助隐藏真实 IP 地址、绕过地理限制或进行负载均衡等操作。
什么是代理?
代理服务器是一种中间服务器,它位于客户端(你的代码)和目标服务器(你要请求的服务器)之间。使用代理服务器,你的请求会首先发送到代理,然后代理再将请求转发给目标服务器,目标服务器的响应也会通过代理返回给你。
代理的使用在数据抓取、访问受限网站、提高隐私保护等场景中非常有用。
在 requests 中使用代理
requests 支持HTTP、HTTPS、SOCKS等代理请求;
使用HTTP、HTTPS代理
如果要使用 HTTP 代理或 HTTPS 代理,你可以在任意请求方法中传入proxies
参数来配置单个请求:
import requests
proxies = {
"http": "http://proxy1:8080",
"https": "https://proxy2.com:8080",
}
#带身份验证的格式
proxies2 = {
'http': 'http://user:password@proxy.example.com:8080',
'https': 'https://user:password@proxy.example.com:8080',
}
response = requests.get("http://example.org", proxies=proxies)
在这个例子中,http 请求将通过http://proxy1:8080
发送,https 请求将通过https://proxy2.com:8080
发送;
通过环境变量设置代理
除了在代码中明确传递proxies
参数,还可以通过环境变量配置代理,requests 库会自动读取这些环境变量并应用代理设置。
Windows 环境变量设置命令
set HTTP_PROXY=http://proxy.example.com:8080
set HTTPS_PROXY=https://proxy.example.com:8080
Linux、macOS 环境变量设置命令
export http_proxy=http://proxy.example.com:8080
export https_proxy=https://proxy.example.com:8080
使用SOCKS代理
requests 支持 SOCKS 协议的代理功能;这是一个可选功能,如果你要使用,需要进行安装:
pip install requests[socks]
在用法上和 HTTP、HTTPS 代理没有太大区别;
proxies = {
'http': 'socks5://user:password@proxy.example.com:1080',
'https': 'socks5://user:password@proxy.example.com:1080',
}
代理池
如果你需要频繁更换代理以避免被网站屏蔽,可以创建一个代理池,并随机选择代理。示例代码如下:
import requests
import random
proxies_list = [
{'http': 'http://proxy1.example.com:8080', 'https': 'http://proxy1.example.com:8080'},
{'http': 'http://proxy2.example.com:8080', 'https': 'http://proxy2.example.com:8080'},
{'http': 'http://proxy3.example.com:8080', 'https': 'http://proxy3.example.com:8080'},
]
proxies = random.choice(proxies_list)
response = requests.get('https://httpbin.org/ip', proxies=proxies)