如何利用SSR代理配置Python requests.get访问境外网站?附版本信息
使用Python requests结合ShadowsocksR代理访问外网
首先,你得确保你的ShadowsocksR-dotnet4.0客户端已经正常运行,并且开启了本地SOCKS5代理——默认情况下,SSR客户端会在本地的1080端口提供SOCKS5代理服务(你可以在客户端的设置面板里确认具体端口,比如有些用户会改成10800之类的)。
1. 安装必要的依赖
requests库本身不原生支持SOCKS5代理,所以需要安装额外的包来补全这个功能:
pip install requests[socks] # 或者单独安装pysocks,效果完全一致 # pip install pysocks
如果你的Python3.6.8遇到版本兼容问题,可以指定兼容的pysocks版本:
pip install pysocks==1.7.1
2. 在requests中配置代理
有两种常用的配置方式,你可以根据需求选择:
方式一:单请求单独设置代理
每次调用requests.get()时,通过proxies参数指定代理,适合只需要个别请求走代理的场景:
import requests # 这里的端口要和你的SSR客户端本地代理端口完全匹配 proxies = { 'http': 'socks5://localhost:1080', 'https': 'socks5://localhost:1080' } try: # 测试访问外网站点,比如Google response = requests.get('https://www.google.com', proxies=proxies, timeout=10) response.raise_for_status() # 自动检测请求是否成功 print("请求成功,状态码:", response.status_code) # 可以打印部分响应内容验证连接有效性 print(response.text[:500]) except requests.exceptions.RequestException as e: print(f"请求失败:{e}")
方式二:全局设置代理(Session对象)
如果希望所有requests请求都自动走代理,可以用Session对象统一配置,适合批量请求的场景:
import requests # 创建Session并绑定代理配置 session = requests.Session() session.proxies = { 'http': 'socks5://localhost:1080', 'https': 'socks5://localhost:1080' } try: # 用session发起的所有请求都会自动使用代理 response = session.get('https://www.google.com', timeout=10) response.raise_for_status() print("请求成功,状态码:", response.status_code) except requests.exceptions.RequestException as e: print(f"请求失败:{e}")
3. 关键注意事项
- 务必确认SSR客户端处于正常运行状态,且本地代理端口没有被其他程序占用;
- 如果你的SSR客户端修改过默认端口,一定要把代码里的
1080改成你实际使用的端口; - 测试时优先选择稳定的外网站点(比如Google),避免因目标站点本身的问题导致误判。
内容的提问来源于stack exchange,提问作者Oldhunter H




