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

迁移至Google Identity Services后aiohttp无法获取myid Cookie求助

问题解析与修复:Google Identity Services Cookie导致aiohttp无法读取自定义Cookie

问题核心原因

Google Identity Services设置的g_state={"i_l":0} Cookie值违反了Cookie规范,而Python标准库的http.cookies.SimpleCookie对格式校验严格,遇到非法Cookie项时会停止解析后续所有Cookie,这才导致你的myid=10无法被读取。

对三个疑问的解答

  • 是Google的无效Cookie值问题? 是的。根据RFC 6265规范,Cookie值不能包含未转义的{、}这类特殊字符,Google的g_state直接使用了未转义的大括号,属于格式违规。
  • 是SimpleCookie的解析问题? 不算。SimpleCookie的逻辑严格遵循早期的RFC 2109/2965标准,遇到不符合规范的Cookie项时会跳过,并且终止后续Cookie的解析(这是导致你的自定义Cookie被忽略的直接原因)。
  • 是aiohttp的Bug? 不是。aiohttp只是直接复用了Python标准库的SimpleCookie处理请求Cookie,本身没有逻辑错误。

正确修复方案

方案一:自定义Cookie解析逻辑

绕过SimpleCookie的严格校验,手动拆分并解析Cookie头,忽略格式错误的项:

def parse_raw_cookies(cookie_header):
    cookies = {}
    if not cookie_header:
        return cookies
    
    for item in cookie_header.split(';'):
        item = item.strip()
        if '=' not in item:
            continue
        key, val = item.split('=', 1)
        # 可选:处理HTML转义字符,比如把"还原为"
        val = val.replace('"', '"')
        cookies[key] = val
    return cookies

# 在aiohttp请求处理中使用
async def handle_request(request):
    raw_cookies = parse_raw_cookies(request.headers.get('Cookie', ''))
    myid = raw_cookies.get('myid')
    # 后续业务逻辑...

方案二:向Google反馈格式问题

你可以通过Google Identity Services的官方反馈渠道提交问题,要求修复g_state Cookie的格式——正确的做法应该是对特殊字符进行URL编码,或者用双引号包裹Cookie值并转义内部的引号。

临时方案说明

你当前直接从request.headers['Cookie']中读取myid的方式是可行的,但自定义解析逻辑会更健壮,能兼容更多异常情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:31:09