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

Python3使用aiohttp请求部分网站报header存在无效字符错误如何解决

aiohttp请求部分网站提示invalid character in header问题解答

问题原因

该问题由aiohttp与requests的HTTP校验策略差异导致:

  • aiohttp默认严格遵循HTTP RFC规范,对响应头的字符范围做强校验,若目标网站返回的响应头包含非ASCII字符、未转义控制字符等不符合规范的内容,会直接抛出对应错误
  • requests对不规范响应头做了内置容错处理,会自动转义或忽略异常字符,因此可以正常请求成功

解决方案

方案1:关闭响应头严格校验(推荐)

aiohttp 3.7及以上版本可直接在创建ClientSession时传入response_params={"strict": False}关闭校验逻辑,同时建议手动指定标准浏览器UA,避免部分网站拦截非浏览器请求,修改后代码如下:

import asyncio
import aiohttp

async def main():
    async with aiohttp.ClientSession(response_params={"strict": False}) as session:
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
        }
        async with session.get('https://www.rockhamptonregion.qld.gov.au/Home', headers=headers) as response:
            print("Status:", response.status)

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

如果使用的aiohttp版本低于3.7,可通过自定义响应类实现相同效果:

import asyncio
import aiohttp
from aiohttp import ClientResponse

class NonStrictResponse(ClientResponse):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, strict=False, **kwargs)

async def main():
    async with aiohttp.ClientSession(response_class=NonStrictResponse) as session:
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
        }
        async with session.get('https://www.rockhamptonregion.qld.gov.au/Home', headers=headers) as response:
            print("Status:", response.status)

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

方案2:自定义响应头预处理(特殊场景用)

如果目标网站返回的响应头存在编码异常,可在自定义响应类中提前对响应头做编码转义、异常字符过滤处理,再交给aiohttp原生逻辑解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 06:39:03