requests 踩坑记

调试代码的时候发现了一个错误

Object of type ‘CaseInsensitiveDict‘ is not JSON serializable

研究后发现requests对请求headersbody做了类型准换:

  • headers:你用resp.request.body访问headers的值的类型,他会是CaseInsensitiveDict类型
  • body:如果你的请求bodycontent-typeapplication/json,你用resp.request.body访问body的值的类型,他会是bytes类型

resp.request.headers

json.dumps() 用于将字典格式化为 json 字符串,由于resp.request.headers 类型是CaseInsensitiveDict,那么用json.dumps() 直接格式化会报错

CaseInsensitiveDict:大小写不敏感字典

resp.request.headers的数据示例

{
    "method": "POST",
    "headers": {
      "User-Agent": "python-requests/2.25.1",
      "Accept-Encoding": "gzip, deflate",
      "Accept": "*/*",
      "Connection": "keep-alive",
      "dbname": "id_5210a4fb-597c-4c33-8712-377c56614d74",
      "Content-Type": "application/json",
      "Content-Length": "47"
    }
}

而json.dumps()只格式化标准字典dict, 所以需要将CaseInsensitiveDict转为dict:

dict(resp.request.headers)

resp.request.body

json.loads()用于将json字符串格式化为字典,但resp.request.body是byte类型,所以需要转化为标准字符串:

resp.request.body.decode()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值