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

如何将requests的HTTPAdapter重构适配到aiohttp异步HTTP客户端使用

aiohttp实现requests自定义HTTPAdapter功能的方案

aiohttp没有提供和requests中HTTPAdapter完全对等的组件,你场景中自定义TLS配置的需求,可以通过自定义SSL上下文配合TCPConnector实现,和原有TlsAdapter效果完全一致。

具体实现代码

1. 常量与SSL上下文构造

import ssl
import asyncio
import aiohttp

CIPHERS = ':'.join([
    'ECDHE-ECDSA-AES128-GCM-SHA256', 'ECDHE-RSA-AES128-GCM-SHA256', 'ECDHE-ECDSA-AES256-GCM-SHA384',
    'ECDHE-RSA-AES256-GCM-SHA384', 'ECDHE-ECDSA-CHACHA20-POLY1305', 'ECDHE-RSA-CHACHA20-POLY1305',
    'DHE-RSA-AES128-GCM-SHA256', 'DHE-RSA-AES256-GCM-SHA384', 'DHE-RSA-CHACHA20-POLY1305', 'ECDHE-ECDSA-AES128-SHA256',
    'ECDHE-RSA-AES128-SHA256', 'ECDHE-ECDSA-AES128-SHA', 'ECDHE-RSA-AES128-SHA', 'ECDHE-ECDSA-AES256-SHA384',
    'ECDHE-RSA-AES256-SHA384', 'ECDHE-ECDSA-AES256-SHA', 'ECDHE-RSA-AES256-SHA', 'DHE-RSA-AES128-SHA256',
    'DHE-RSA-AES256-SHA256', 'AES128-GCM-SHA256', 'AES256-GCM-SHA384', 'AES128-SHA256', 'AES256-SHA256', 'AES128-SHA',
    'AES256-SHA', 'DES-CBC3-SHA'
])

# 构造和原有TlsAdapter功能一致的SSL上下文
def create_custom_ssl_context(ssl_options=0):
    ctx = ssl.create_default_context()
    ctx.set_ciphers(CIPHERS)
    ctx.verify_mode = ssl.CERT_REQUIRED
    ctx.options |= ssl_options
    return ctx

2. 调用方式(对应原有mount逻辑)

将构造好的SSL上下文传入aiohttp.TCPConnector,即可实现全局生效的TLS配置,等价于你原来给https://前缀挂载自定义Adapter的效果:

async def main():
    # 禁用TLS1.0和TLS1.1,和原有参数一致
    custom_ssl = create_custom_ssl_context(ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1)
    # 创建异步会话时传入自定义配置的连接器
    async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=custom_ssl)) as session:
        # 后续所有请求都会自动使用自定义的TLS配置
        async with session.get("https://example.com") as resp:
            print(resp.status, await resp.text())

if __name__ == "__main__":
    asyncio.run(main())

其他扩展说明

如果你原有自定义Adapter还有额外的配置需求,可以对应调整TCPConnector的参数:

  • 连接池大小调整:修改TCPConnector的limit参数即可自定义并发连接上限
  • 单请求特殊配置:不需要全局生效的话,可以直接在session.get/post等方法中传入ssl=custom_ssl参数,仅对当前请求生效
  • 代理、超时等配置均可以通过ClientSession和TCPConnector的对应参数实现

内容的提问来源于stack exchange,提问作者asdasd31

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:36:02