You need to enable JavaScript to run this app. 使用requests调用JSON接口抓取Taleo职位信息触发JSONDecodeError的求助
优惠活动
大模型
产品
解决方案
定价
更多

使用requests调用JSON接口抓取Taleo职位信息触发JSONDecodeError的求助

Taleo招聘接口JSONDecodeError排查方案

报错Expecting value: line 1 column 1 (char 0)的本质是响应内容第一个字符就不符合JSON格式要求(要么为空、要么是HTML错误页、要么是压缩乱码),优先按以下步骤排查:

第一步:打印原始响应定位根因

不要直接调用response.json(),先输出以下核心信息:

  • response.status_code:确认请求状态,4xx/5xx状态码基本都会返回非JSON的错误页
  • response.headers.get("Content-Type"):确认响应声明的类型,是否为application/json
  • response.text[:500]:查看响应前500个字符,直接判断是空白、HTML、乱码还是有效JSON开头

高频坑点(按出现概率排序)

  • 缺失Taleo专属请求头:Taleo的异步接口普遍要求携带X-Requested-With: XMLHttpRequest头,未携带该字段时服务器会直接返回HTML格式的页面而非JSON数据
  • 请求体格式不匹配:绝大多数旧版Taleo接口的POST请求体要求是application/x-www-form-urlencoded格式,而非application/json。不要把请求体字典转成JSON字符串发送,直接将字典传给requests.post()的data参数即可
  • 请求上下文不合法:Taleo会校验请求的Referer是否为对应搜索页的完整URL,同时必须携带完整的会话Cookie(尤其是JSESSIONID类的会话标识),缺漏任意一项都会被服务器拦截返回空响应
  • 手动覆盖编码配置:如果手动在请求头中设置了Accept-Encoding,可能导致requests无法自动解压服务器返回的gzip压缩内容,出现乱码导致解析失败。调试阶段不要手动设置该字段,让requests自动处理即可
  • 接口URL错误:确认从Network面板复制的接口URL没有遗漏路径参数、未额外拼接无关查询参数,避免请求到404页面返回HTML

最小调试代码模板

import requests

# 初始化会话,自动管理Cookie上下文
session = requests.Session()

# 按浏览器实际请求复制完整请求头,不要遗漏字段
headers = {
    "User-Agent": "你实际浏览器的UA字符串",
    "Accept": "application/json, text/javascript, */*; q=0.01",
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    "Referer": "你访问的Taleo招聘搜索页完整URL",
    "X-Requested-With": "XMLHttpRequest"
}

# 把所有Cookie键值对更新到会话,不要塞到请求头里避免格式错误
session.cookies.update({
    "JSESSIONID": "你从浏览器复制的会话ID值",
    # 补充所有其他Cookie键值对
})

# 发起POST请求
response = session.post(
    "你从Network面板复制的完整接口URL",
    headers=headers,
    data={
        # 直接传POST表单参数键值对,不要用json.dumps处理
        "参数1": "参数值1",
        "参数2": "参数值2"
    }
)

# 先输出调试信息
print("状态码:", response.status_code)
print("响应类型:", response.headers.get("Content-Type"))
print("响应预览:", response.text[:500])

# 确认响应符合要求后再解析为JSON
if response.status_code == 200 and "application/json" in response.headers.get("Content-Type", ""):
    job_detail = response.json()
    # 后续数据处理逻辑
else:
    print("响应不符合预期,根据上述调试信息修正请求参数")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 12:06:04