如何在Python Requests中使用代理(HTTP/HTTPS与Session连接池)
更新于:
Python的 requests 库通过一个 proxies 字典接收认证的 VinaProxy 代理,将 'http' 和 'https' 键均映射到 http://user:pass@ip:port 格式。将该字典绑定到长连接 requests.Session() 可以复用底层的TCP套接字,显著降低爬虫开销并提高抓取速度。
proxies = {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}- 1 个IP₫40,000
- 5+ 个IP₫35,000
- 10+ 个IP₫25,000
- 20+ 个IP₫25,000
- 50+ 个IP₫25,000
- 100+ 个IP₫25,000
- 200+ 个IP₫25,000
- 500+ 个IP₫25,000
- 1000+ 个IP₫22,000
- 2000+ 个IP₫20,000
- 1 个IP₫40,000
- 5+ 个IP₫35,000
- 10+ 个IP₫25,000
- 20+ 个IP₫25,000
- 50+ 个IP₫25,000
- 100+ 个IP₫25,000
- 200+ 个IP₫25,000
- 500+ 个IP₫25,000
- 1000+ 个IP₫22,000
- 2000+ 个IP₫20,000
配置proxies字典格式与复用Session长连接
针对每个URL单独调用 requests.get() 会在每次请求时重新发起TCP三次握手与TLS证书协商。将代理绑定到 session = requests.Session() 能在多次连续请求间保持代理TCP隧道处于活跃状态。
| Requests参数 | 推荐代码语法 | 技术作用说明 |
|---|---|---|
'http' 键 | 'http://user:pass@ip:port' | 通过代理转发普通HTTP请求 |
'https' 键 | 'http://user:pass@ip:port' | 使用 http:// 协议头以便底层 urllib3 发送HTTP CONNECT指令建立TLS隧道 |
timeout 元组 | timeout=(5, 15) | 5秒连接超时与15秒读取超时,防止工作线程死锁卡住 |
| IP池轮换 | itertools.cycle(proxy_list) | 在你的独享静态IP池中均匀平摊轮询请求 |
避免常见的urllib3与ProxyError报错陷阱
- 对于
'http'和'https'字典键,代理URL前缀请统一使用http://(而非https://),除非代理端口明确要求TLS-over-TLS双层加密 - 如果密码中含有
@、:等特殊符号,请务必使用urllib.parse.quote(password, safe='')进行URL转义 - 出现
407 Proxy Authentication Required错误通常意味着URL字符串中的用户名或密码与控制台凭据不一致 - 该配置逻辑完全适用于
httpx.Client(proxy='http://user:pass@ip:port')以及aiohttp的session.get(url, proxy=...)
操作步骤
- 1
将ip:port:user:pass转换为URL格式
使用我们的代理格式转换工具将 VinaProxy 代理列表快速转换为
http://user:pass@ip:port字符串。 - 2
定义proxies字典
在Python脚本中声明
proxies = {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}。 - 3
绑定至requests.Session()实例
初始化
s = requests.Session()并执行s.proxies.update(proxies)以启用持久Keep-Alive连接池。 - 4
发起测试请求验证出口IP
运行
print(s.get('https://vinaproxy.com/api/my-ip', timeout=10).json()),确认返回的JSON包含代理IP。
常见问题
为什么'https'键的代理URL依然使用'http://user:pass@ip:port'?
http:// 前缀用于告知 urllib3 连接代理服务器自身的通信协议(通过标准HTTP CONNECT建立隧道),而你到目标 https:// 网站的端到端流量全程保持TLS高强度加密。
在Python中如何让25个静态代理在抓取时均匀轮换?
将25个代理URL加载到 pool = itertools.cycle(PROXIES),在每次请求时传入 proxies={'http': p, 'https': p},并配合合理的单IP请求频率限制。
VinaProxy 会对Python爬虫脚本统计并限制流量吗?
不会。所有独享IPv4和静态住宅ISP套餐均提供无限月度流量,不按GB扣费。
搭建不限流量的Python爬虫代理池
覆盖全球7个核心国家的独享IPv4与静态住宅ISP代理,即买即用。
购买Python代理