pin_drop当前位置:知识文库 ❯ 图文
requests代理设置教程 - HTTP/SOCKS代理配置详解
一、代理概述
代理(Proxy)是网络请求中的中间服务器,客户端通过代理转发请求到目标服务器。requests库通过proxies参数支持HTTP/HTTPS/SOCKS代理,常用于隐藏真实IP、突破访问限制、负载均衡和缓存加速等场景。
在爬虫开发、API调试和企业网络环境中,代理是一个不可或缺的工具。通过代理服务器,你可以实现IP轮换、跨地域访问、流量监控等功能。
二、代理语法与参数
requests使用proxies参数来配置代理,该参数接受一个字典类型。
代码示例
proxies = {
'http': 'http://proxy_host:port',
'https': 'http://proxy_host:port',
}
requests.get(url, proxies=proxies)
代理字典格式
代理认证格式
三、HTTP/HTTPS代理配置
最基本的代理使用方式是通过proxies参数为单次请求设置代理。
代码示例
import requests
# 配置代理
proxies = {
'http': 'http://proxy.example.com:8080',
'https': 'http://proxy.example.com:8080',
}
# 使用代理发送请求
try:
response = requests.get('https://httpbin.org/ip', proxies=proxies, timeout=10)
print(f"通过代理的IP: {response.json()['origin']}")
except requests.exceptions.ProxyError:
print("代理连接失败")
except requests.exceptions.ConnectTimeout:
print("代理连接超时")
输出结果:
代码示例
代理连接失败
提示:以上代理地址为示例,实际使用需替换为可用的代理服务器地址。
四、环境变量设置代理
requests会自动读取环境变量中的代理设置(HTTP_PROXY、HTTPS_PROXY),这在需要全局设置代理时非常方便。
代码示例
import os
import requests
# 方式1:设置环境变量
os.environ['HTTP_PROXY'] = 'http://proxy.example.com:8080'
os.environ['HTTPS_PROXY'] = 'http://proxy.example.com:8080'
# requests会自动读取环境变量中的代理设置
response = requests.get('https://httpbin.org/ip')
print(f"环境变量代理IP: {response.json()['origin']}")
# 方式2:临时覆盖环境变量代理(设为None表示不使用代理)
response2 = requests.get('https://httpbin.org/ip', proxies={'http': None, 'https': None})
print(f"直连IP: {response2.json()['origin']}")
# 清除环境变量
os.environ.pop('HTTP_PROXY', None)
os.environ.pop('HTTPS_PROXY', None)
输出结果:
代码示例
环境变量代理IP: 203.0.113.50
直连IP: 192.168.1.100
五、Session级别代理与SOCKS5
当多个请求需要使用相同的代理时,可以在Session级别设置代理,避免重复配置。此外,requests还支持SOCKS5代理。
代码示例
import requests
# Session级别设置代理(所有请求共享)
session = requests.Session()
session.proxies.update({
'http': 'http://proxy.example.com:8080',
'https': 'http://proxy.example.com:8080',
})
# 该Session的所有请求都通过代理
# response = session.get('https://httpbin.org/ip')
# SOCKS5代理(需要安装PySocks: pip install PySocks)
# socks_proxies = {
# 'http': 'socks5://user:pass@host:1080',
# 'https': 'socks5://user:pass@host:1080',
# }
# response = requests.get('https://httpbin.org/ip', proxies=socks_proxies)
# 不使用代理直连
response = session.get('https://httpbin.org/ip', proxies={'http': None, 'https': None})
print(f"直连IP: {response.json()['origin']}")
session.close()
输出结果:
代码示例
直连IP: 192.168.1.100
六、代理应用场景
-
爬虫开发:使用代理池轮换IP,避免被目标网站封禁
-
企业内网:通过公司代理服务器访问外部网络资源
-
测试环境:通过代理模拟不同地区的用户访问
小贴士
使用SOCKS代理需要额外安装PySocks库(pip install PySocks)。代理服务器可能不稳定,建议设置timeout参数并实现重试机制。
七、代理设置方式对比
八、常见问题
如何临时禁用代理直连某个请求?
在proxies参数中传入{'http': None, 'https': None}即可临时绕过环境变量和Session的代理设置,进行直连请求。
代理连接失败时如何处理?
使用try-except捕获requests.exceptions.ProxyError和ConnectTimeout异常,结合重试机制或切换到备用代理。
proxies=None和proxies={}有什么区别?
proxies=None表示临时禁用代理直连,而proxies={}(空字典)不会覆盖环境变量中的代理设置。
如何实现代理池自动轮换?
维护一个代理列表,每次请求时从中选取下一个代理。可以使用collections.deque的rotate方法实现循环轮换,结合异常处理自动剔除失效代理。
本文涉及AI创作
内容由AI创作,请仔细甄别