使用requests/aiohttp通过SOCKS5代理请求站点时遇0x05连接拒绝问题
SOCKS5代理请求目标站点报错
0x05:连接被拒绝的排查与解决 问题背景
我有两个版本的程序:
- 同步版本:基于
requests库 - 异步版本:基于
aiohttp库
通过SOCKS5代理请求站点时,多数站点正常,但目标站点返回错误:
0x05: 连接被拒绝
错误含义说明
0x05是SOCKS5协议的标准错误码,代表代理服务器尝试与目标站点建立连接时,被目标站点主动拒绝。这说明代理本身的连通性没问题(其他站点可正常访问),问题出在目标站点对代理的限制、请求参数错误或站点自身状态。
同步版本(requests)的修复方案
校验目标站点端口与协议
确认请求URL的端口是否为目标站点开放的端口(比如误将HTTPS的443写成HTTP的80,或者目标使用非标准端口),示例修正代码:import requests from requests_socks import SOCKS5Adapter session = requests.Session() # 配置SOCKS5代理 session.mount('http://', SOCKS5Adapter(proxy='socks5://user:pass@proxy_ip:proxy_port')) session.mount('https://', SOCKS5Adapter(proxy='socks5://user:pass@proxy_ip:proxy_port')) # 确保目标URL的端口、协议正确 response = session.get('https://target-site.com:正确端口')强制指定TLS版本
部分SOCKS5代理或目标站点对TLS版本有要求,可强制适配目标站点支持的版本:import ssl from requests.adapters import HTTPAdapter from urllib3.poolmanager import PoolManager from urllib3.util import ssl_ class TLSAdapter(HTTPAdapter): def init_poolmanager(self, *args, **kwargs): # 适配目标站点支持的TLS版本,比如TLSv1.2 ctx = ssl_.create_urllib3_context(ssl_version=ssl.PROTOCOL_TLSv1_2) kwargs['ssl_context'] = ctx return super().init_poolmanager(*args, **kwargs) # 挂载适配规则到session session.mount('https://', TLSAdapter())
异步版本(aiohttp)的修复方案
检查代理与目标地址配置
确认aiohttp的SOCKS代理参数格式正确,目标URL无拼写错误:import aiohttp import asyncio async def fetch_target(): connector = aiohttp.SocksConnector( socks_url='socks5://user:pass@proxy_ip:proxy_port' ) async with aiohttp.ClientSession(connector=connector) as session: # 确认目标地址的端口、协议正确 async with session.get('https://target-site.com:正确端口') as response: print(await response.text()) asyncio.run(fetch_target())添加浏览器请求头伪装
目标站点可能识别了SOCKS5代理特征,可通过修改请求头伪装成普通浏览器:headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Accept-Language': 'zh-CN,zh;q=0.9' } async with session.get('https://target-site.com', headers=headers) as response: ...
通用排查步骤
- 直接在代理服务器所在网络执行
curl命令,验证代理到目标站点的连通性:curl -x socks5://proxy_ip:proxy_port https://target-site.com - 更换其他同类型SOCKS5代理测试,排查目标站点是否拉黑当前代理IP
- 用非代理的正常网络访问目标站点,确认站点本身是否正常运行
内容的提问来源于stack exchange,提问作者SecorD
相关产品推荐
相关产品推荐

