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

Python aiohttp与requests请求同接口返回结果差异问题求解

问题根因

不存在接口对aiohttp、requests返回不同内容的情况,从你贴的aiohttp输出可以看到,请求实际已经拿到200 OK的正常响应,响应头也明确标注返回格式为application/json,问题出在aiohttp代码的写法错误:

  • 核心错误:aiohttp.ClientResponse的text是需要调用的异步协程方法,不是requests里那种可直接读取的实例属性。你写的result = get_image_data.text没有加括号调用方法,也没有加await等待协程执行,拿到的只是方法本身的对象引用,就是输出里看到的<bound method ClientResponse.text ...>,根本没有实际读取响应体内容。
  • 次要问题:你写的requests版本headers里,User-Agent的键名和值前面都多了前置空格,属于格式不合法的请求头,只是requests自带容错机制自动处理了这个问题,aiohttp对header格式校验更严格,多余空格会导致请求头不生效,不过你当前aiohttp版本里的UA头格式是正确的。
修正后的可运行aiohttp代码
import aiohttp
import asyncio 

headersList = {
    "Accept": "*/*",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" 
}

async def test():
    async with aiohttp.ClientSession() as session:
        async with session.get(
            'https://api-mainnet.magiceden.io/all_collections_with_escrow_data',
            headers=headersList
        ) as resp:
            # 注意:text是方法要加括号,且是协程必须加await
            result = await resp.text()
            print(result)
    
if __name__ == '__main__':
    asyncio.run(test())
注意事项
  • 你在aiohttp版本里额外加的origin、referer、sec-fetch-*这类请求头,这个接口完全不做校验,不需要额外添加,和requests一样传基础头就能正常拿到数据。
  • aiohttp中所有读取响应内容的方法:text()、json()、read()全都是异步协程,必须加await关键字调用,不能直接当属性取值。
  • 响应读取操作要放在async with session.get(...) as resp的上下文块内部执行,避免连接释放后再读内容抛出连接关闭错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:03:40