如何用curl访问带密码保护的Jupyter Lab API?
如何用Curl访问受密码保护的Jupyter Lab服务器API?
你之前方法的问题分析
- 直接用密码哈希作为
Authorization: token是错误的:Jupyter的API令牌是登录后生成的临时会话令牌,不是你配置文件里存储的密码哈希值。 - Python代码中错误地用POST请求
/api/status:这个接口是GET接口,POST请求会被拒绝。 - 你的Curl脚本缺少XSRF令牌处理:Jupyter的登录请求需要携带XSRF令牌(从登录页面的cookie中获取),否则会返回403错误。
正确的Curl实现步骤
Jupyter Lab的登录需要处理XSRF令牌和会话Cookie,以下是完整的可执行脚本:
#!/bin/bash # 配置参数 SERVER_URL="http://localhost:8888" # 替换成你的Jupyter Lab地址 PASSWORD="your_jupyter_password" # 替换成你的登录密码 # 1. 创建临时文件存储Cookie TMP_COOKIE=$(mktemp) # 2. 获取登录页面的XSRF令牌和初始Cookie XSRF_TOKEN=$(curl -s -c "$TMP_COOKIE" "$SERVER_URL/login" | grep -o '_xsrf" value="[^"]*"' | cut -d '"' -f 4) # 3. 提交登录请求,携带XSRF令牌和密码,更新Cookie curl -s -b "$TMP_COOKIE" -c "$TMP_COOKIE" "$SERVER_URL/login" \ -d "_xsrf=$XSRF_TOKEN" \ -d "password=$PASSWORD" # 4. 用已登录的Cookie访问API接口(比如/api/status) curl -s -b "$TMP_COOKIE" "$SERVER_URL/api/status" # 清理临时文件 rm "$TMP_COOKIE"
脚本说明
-c:将响应的Cookie写入指定文件-b:发送请求时携带指定文件中的Cookie- 先访问
/login页面获取_xsrf令牌和初始会话Cookie,这一步是必须的,因为Jupyter会验证XSRF令牌防止跨站请求 - 登录请求需要同时携带
_xsrf和password两个表单参数 - 后续API请求只需要携带登录后的会话Cookie即可,不需要再重复提交密码或令牌
额外排查要点
- 确认Jupyter Lab已启用API:默认情况下API是开启的,如果修改过配置文件
jupyter_notebook_config.py,检查是否设置了c.NotebookApp.disable_check_xsrf = False(默认是False,开启XSRF验证) - 检查服务器地址和端口是否正确:确保
SERVER_URL指向Jupyter Lab的实际访问地址,比如带端口号、正确的协议(http/https) - 如果你使用的是Jupyter Notebook而不是Lab,路径是一样的,脚本通用
- 如果登录后仍然返回403,检查Cookie是否正确保存,或者尝试清空临时文件重新运行
内容的提问来源于stack exchange,提问作者HappyFace
相关产品推荐
相关产品推荐

