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

Python使用requests库无法抓取JSESSIONID该如何解决?

可行解决方案

核心原因

JSESSIONID是服务端在用户首次初始化会话时下发的Cookie值,你之前直接跳步请求后端API接口,等于跳过了会话初始化的流程,服务端不会给非法会话下发JSESSIONID,自然拿不到对应Cookie。

具体操作步骤

步骤1:先模拟正常访问流程,初始化会话

先请求站点首页,触发服务端下发JSESSIONID,同时给Session设置完整的浏览器请求头,避免被爬虫拦截:

import requests

query = 'Example%20query'
# 初始化会话
s = requests.Session()
# 配置和浏览器一致的请求头,不要用requests默认UA,极易被拦截
s.headers.update({
    "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",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
    "Accept-Encoding": "gzip, deflate, br",
    "Connection": "keep-alive"
})
# 第一步先访问站点首页,触发服务端下发JSESSIONID
s.get("https://www.examplewebsite.nl/")
# 此时即可正常获取到JSESSIONID
print(s.cookies.get("JSESSIONID"))
# 再请求目标API接口,会话会自动携带JSESSIONID
suggest = s.get(f'https://www.examplewebsite.nl/api_route/suggest?query={query}').json()

步骤2:特殊场景适配

如果完成步骤1后仍无法获取JSESSIONID,按以下顺序排查:

  • 补全所有请求头参数:把你手动调用接口时的所有请求头(包括Referer、Origin、Sec-*系列参数)都配置到Session的headers中,不要缺项
  • 解决TLS指纹识别:部分站点会校验请求的TLS指纹,requests的默认指纹特征会被识别为爬虫,可替换为和requests用法一致的curl_cffi库模拟浏览器指纹,即可绕过校验
  • 手动设置Cookie作用域:如果服务端下发的JSESSIONID domain/path和接口不匹配,可手动设置Cookie到会话中:
    s.cookies.set("JSESSIONID", "获取到的JSESSIONID值", domain="www.examplewebsite.nl", path="/")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:45:07