发起一个get请求时,使用response.json()打印响应结果一直报 : raise JSONDecodeError("Expecting value", s, err.value) from Nonejson.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)错误
报错代码:
studet_url = "https://你的域名/workbench_api/manager/list?_=1648455040100"
headers = {"Host": "你的域名",
"Accept-Encoding": "gzip, deflate, br", # 删除这一行就不会报错了
"Connection": "keep-alive",
"accept": "application/json; charset=utf-8",
}
student = requests.get(url=studet_url, headers=headers, cookies=cookie)
print(student.json() # 这一句报错
后来发现原来的传递的请求头不对,将headers中的 "Accept-Encoding": "gzip, deflate, br"删除,再请求就不会报错了
问题原因:
大部分浏览器之所以添加:"Accept-Encoding" = "gzip,deflate"是因为浏览器对从服务器中返回的gzip压缩的网页,会自动解压缩。所以,浏览器在发起请求时添加 "Accept-Encoding": "gzip, deflate, br"代表可接受压缩后的数据以及对应的压缩格式。
而此代码中,如果也添加 "Accept-Encoding": "gzip, deflate, br",结果返回的就是压缩后的数据,没有解码,故无法使用response.json()。因为response.json()是将返回的json数据转为字典。