在Replit中使用scratchclient模块出现KeyError: 'set-cookie'错误求助
问题重现
在Replit的Python环境中使用scratchclient模块,执行初始化会话代码时触发以下错误:
Traceback (most recent call last): File "main.py", line 9, in <module> session = scratchclient.ScratchSession(username, password) File "/home/runner/LumberingJuicyType/venv/lib/python3.8/site-packages/scratchclient/ScratchSession.py", line 31, in __init__ self.login(password) File "/home/runner/LumberingJuicyType/venv/lib/python3.8/site-packages/scratchclient/ScratchSession.py", line 66, in login self.session_id = re.search('"(.*)"', request.headers["Set-Cookie"]).group() File "/home/runner/LumberingJuicyType/venv/lib/python3.8/site-packages/requests/structures.py", line 52, in __getitem__ return self._store[key.lower()][1] KeyError: 'set-cookie'
可能原因
- Scratch官方登录API更新,旧版scratchclient依赖的
Set-Cookie头不再返回 - Replit网络环境拦截或修改了响应,导致
Set-Cookie头丢失 - 账号密码错误或账号被限制,Scratch未返回会话Cookie
解决方案
验证账号有效性
确认Scratch账号密码正确,且账号未被限制登录(可以手动在网页端登录测试)。更新scratchclient到最新版本
旧版本模块可能不兼容当前Scratch API,执行升级命令:pip install --upgrade scratchclient手动修复登录逻辑(如果更新后仍无效)
打开Replit中scratchclient/ScratchSession.py文件,修改login方法里提取session_id的代码:- 先添加调试代码,查看登录请求的响应内容:
# 在login方法里插入以下代码 print(request.headers) print(request.text) - 根据响应内容调整会话信息提取方式,比如如果Scratch在响应体JSON中返回会话ID,替换原正则提取逻辑:
# 替换原session_id提取代码 response_data = request.json() self.session_id = response_data.get("session_id")
- 先添加调试代码,查看登录请求的响应内容:
检查Replit网络连通性
用requests直接测试Scratch登录接口,确认响应是否正常:import requests username = "你的Scratch账号" password = "你的Scratch密码" resp = requests.post("https://scratch.mit.edu/login/", data={"username": username, "password": password}) print("响应头:", resp.headers) print("响应内容:", resp.text)如果没有
Set-Cookie头,说明请求未正确触发Scratch的会话生成,需检查请求参数是否符合当前API要求。
内容的提问来源于stack exchange,提问作者DybaTube
相关产品推荐
相关产品推荐

