You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用requests/aiohttp通过SOCKS5代理请求站点时遇0x05连接拒绝问题

SOCKS5代理请求目标站点报错0x05:连接被拒绝的排查与解决

问题背景

我有两个版本的程序:

  • 同步版本:基于requests库
  • 异步版本:基于aiohttp库

通过SOCKS5代理请求站点时,多数站点正常,但目标站点返回错误:

0x05: 连接被拒绝


错误含义说明

0x05是SOCKS5协议的标准错误码,代表代理服务器尝试与目标站点建立连接时,被目标站点主动拒绝。这说明代理本身的连通性没问题(其他站点可正常访问),问题出在目标站点对代理的限制、请求参数错误或站点自身状态。


同步版本(requests)的修复方案

  1. 校验目标站点端口与协议
    确认请求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:正确端口')
    
  2. 强制指定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)的修复方案

  1. 检查代理与目标地址配置
    确认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())
    
  2. 添加浏览器请求头伪装
    目标站点可能识别了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:02:20