【发布时间】:2020-04-19 17:04:28
【问题描述】:
我正在尝试从 api 获取响应,但无法将其加载到字典中。
这是我的代码:
r = session.post(url, headers=headers, json=payload)
返回的status code 是200,所以我得到了回复。
通过尝试做:reply = r.json() 我得到:
Traceback (most recent call last):
File "C:/Users/PycharmProjects/honeymonitor/main.py", line 46, in <module>
data = get_data(session)
File "C:/Users/PycharmProjects/honeymonitor/main.py", line 35, in get_data
reply = r.json()
File "C:\Users\PycharmProjects\honeymonitor\venv\lib\site-packages\requests\models.py", line 897, in json
return complexjson.loads(self.text, **kwargs)
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
通过使用reply = r.text,我得到了很多乱码:
� d�M���)b�b��$�j�np������X2�Al�w{g��wO�n-���w��g�����}�1�Y5@�R��/�
� X���o]>6,�N�_#�#Ң����K�@���s
��Ɩ�ː�����2��N�:D��p�����7{K��������V��
-")�p0n@I�f!���Q�+| /We�.�p�=����u���-�ʌ�cs�"jfH����}qkː��q�,q�bږq�ٟ��Z���>��U#�����ET�V/��+cU����ʁ�LLe��(���V�2���å}�UC���@�8y��B�7Λ��c���Y?��q��TOMTv{����ߎ������,�[�|��wf_�˰�g������?
post请求头中的内容类型是:
'Content-Type': 'application/json;charset=UTF-8',
另外通过检查r.encoding 我得到None
最后我尝试了json.loads(r.text),但我得到了同样的错误。
还尝试使用r.content.decode('utf-8') 对响应进行编码
并得到UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 1: invalid continuation byte
我做错了什么?
编辑:
我试过用 Fiddler 复制请求,我可以清楚地看到响应 json 那里
我已经比较了 Fiddler 和请求之间的响应头,唯一的区别是请求头中有 'Transfer-Encoding': 'chunked'
EDIT2:
这是r.content的一部分:
b'\x03\xd5\x01\x00d\xca9\x9cvwC\x7f \x1b]j\xfb\xc5\xa3tA\xa1k.N9\x01\x08\x03\r\xcc\x02i\x01\xb7\x0b\xc2=\xc6\x92\xb1\rb\xe3\xbf\xdb;\x83\xb7\xbf{\xe2vk\xd1\xed\xef\xbf[d<{.n\x7fo\xd5WC\xab\x84\xeb\xecN\xd3#\xcc\xed\x0cAks\xa5\xe6\x87?\x15\xb3:\x8d\xfdS}\xb5O\x9a\xb8\x9d\xddK\x98\xf5+HSLq\x14\x84\xab:Fd!\xa8\xc0\x0c\xd2\xd3\x0eL\xd4\xec\x9b\xcb\xf2\xcf\xae\x18\xd9\x15&fg\xbf\xd6.```
【问题讨论】:
-
是否有“内容编码”标头?如果有,它的价值是什么?
-
不,没有
-
我已经编辑了问题,添加了一些我认为有用的信息
-
在您将乱码转换为字符串之前,您将无法解析它。我怀疑响应被压缩了,但是服务器错误地没有声明这个事实,所以
requests不会为你透明地解压缩数据。r.raw显示什么? -
它看起来像一个压缩的(可能是 gzip 压缩的)内容
标签: json python-3.x utf-8 python-requests