如何通过带请求头的请求获取JSON文本,解决JSONDecodeError报错
问题原因分析
- 未保持登录会话:requests单独发送POST登录请求和GET请求时,默认是两个独立会话,登录后返回的身份凭证(Cookie/Token)不会自动携带到后续GET请求中,导致访问
/part_one接口时返回非JSON的未授权页面/错误页面,无法解析为JSON。 - GET请求URL存在多余空格:代码中GET请求的URL末尾多了一个空格,会导致请求地址错误,返回404页面而非预期的JSON数据。
- JSON解析逻辑错误:
response.json()方法已经自动将响应的JSON字符串转换为Python字典/列表对象,再次使用json.loads()嵌套解析相当于对Python对象做JSON字符串解析,直接触发报错。
修复后代码
import requests headers = { 'username': 'Loskarlos', 'password': 'JednohoDneOvladnuKSI' } # 初始化会话,自动保持登录后的身份凭证 session = requests.Session() # 发起登录请求 login_resp = session.post('https://losoviny.iamroot.eu/part_one_login', headers=headers) # 校验登录状态 if login_resp.status_code != 200: print(f"登录失败,状态码:{login_resp.status_code}") else: # 去掉URL末尾多余空格,用同一会话发起数据请求 get_resp = session.get('https://losoviny.iamroot.eu/part_one') if get_resp.status_code == 200: # 直接调用json()方法解析即可,无需额外嵌套json.loads result = get_resp.json() print(result) else: print(f"数据请求失败,状态码:{get_resp.status_code},响应内容:{get_resp.text}")
内容的提问来源于stack exchange,提问作者user17269681
相关产品推荐
相关产品推荐

