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

aiohttp调用英超Fantasy API返回空响应但Postman调用正常求助

问题排查与解决方案

该问题是目标网站的反爬策略拦截导致的:默认aiohttp发起请求时携带的User-Agent会明确标识这是Python脚本请求,网站识别后返回了状态码200但内容为空的响应。Postman因为携带了标准客户端的请求头信息,符合网站的访问规则,所以可以正常获取返回结果。

修复方案

  • 给请求添加常规浏览器的User-Agent请求头,也可按需补充Accept、Accept-Language等其他常规请求头,模拟真实浏览器的访问行为。
  • 可增加响应状态校验逻辑,提前识别请求异常情况,避免后续解析报错。

修改后的完整代码

import asyncio
import time
import aiohttp

# 模拟浏览器的请求头配置
DEFAULT_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": "application/json, text/plain, */*",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8"
}

async def player(name, n, session):
    print(f'number-{n}')
    url = f'https://fantasy.premierleague.com/api/element-summary/{n}/'
    # 携带配置的请求头发起请求
    response = await session.request(method='GET', url=url, headers=DEFAULT_HEADERS)
    # 可选:添加响应状态校验
    if response.status != 200:
        print(f"请求异常,状态码:{response.status}")
        return None
    value = await response.text()
    return value

async def main():
    async with aiohttp.ClientSession() as session:
        response = await player('armaan', 233, session)
        print("response: ", response)


if __name__ == "__main__":
    start = time.perf_counter()
    asyncio.run(main())
    elapsed = time.perf_counter() - start
    print(f"请求总耗时:{elapsed}秒")

如果添加上述请求头后仍然返回空内容,可直接复制Postman请求中携带的所有头信息到DEFAULT_HEADERS配置中,完全匹配Postman的请求特征即可正常获取数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:15:08