pycharm报错raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) requests.exceptions.JSONDecodeError: Exp

报错 requests.exceptions.JSONDecodeError: Expecting value: line 2 column 3 (char 3) 通常意味着在尝试将响应体解析为JSON时出现了问题。具体来说,这个错误发生在Python的 json 模块尝试解析一个字符串时,并没有找到期望的JSON格式数据。这里的错误提示 Expecting value 指出解析器期待在某个位置找到一个有效的JSON值,但却没有找到。

这个错误通常有以下几种可能的原因:

  1. 响应体为空或不是有效的JSON格式:如果服务器的响应不包含任何数据,或者数据格式错误(不符合JSON规范),response.json() 调用会失败。这可能是因为服务器发生错误、返回了错误的内容类型或者根本就没有返回预期的JSON数据。

  2. 错误的Content-Type:有时候服务器可能返回了非JSON的内容类型,但客户端错误地尝试将其解析为JSON。例如,如果服务器返回了一个纯文本消息或HTML页面(可能是错误信息页面),而客户端仍然尝试解析JSON,这将导致解析错误。

  3. 服务器错误:服务器可能遇到了错误,返回了非预期的响应,如错误代码或错误页面。 

可以通过以下代码去检查具体的错误原因:

import requests

response = requests.get('https://api.example.com/data')

# 打印HTTP状态码和响应头部信息
print("Status Code:", response.status_code)
print("Headers:", response.headers)

# 检查响应头确保我们收到的是JSON格式的内容
if response.headers.get('Content-Type') == 'application/json':
    # 打印响应的原始文本
    print("Response Text:", response.text)
    
    # 尝试解析JSON
    try:
        data = response.json()
        print("JSON Data:", data)
        
        # 检查是否含有 'statuses' 键
        if 'statuses' in data:
            return data['statuses']
        else:
            print("JSON没有'statuses'值")
    except requests.exceptions.JSONDecodeError:
        print("JSON解析错误. 响应是无效JSON.")
else:
    print(期待收到JSON响应,但是收到:", response.headers.get('Content-Type'))

如果Content-Type 是“text/html”,那么可以在header中添加'Accept': 'application/json' ,例如:

而我这边遇到的问题是,返回的data数据为{'ok': -100, 'url': 'https://example.com/login.php'} ,但是我期望的是{"ok":1,"statuses":[{"visible":{"type":0,"list_id":0},"created_at":"Fri Apr 12... 

分析可能的原因:

  1. 未认证或认证失效

    • API请求可能需要有效的登录凭证(如cookies、tokens等),你的请求中可能没有包含这些,或者包含的凭证已过期或无效。
  2. 访问受限

    • 如果API需要特定的用户权限,而当前的用户身份没有这些权限,服务器可能会重定向到登录页面,请求重新认证。
  3. API使用方式变更

    • 有些API可能更改了使用策略或者认证方式,需要客户端进行更新或调整。

 我的问题是cookie过期了,需要对header里的cookie数据进行更新。cookie会失效,重新粘贴cookie即可。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值