Python json.loads错误:';utf-8';编解码器可以';t解码位置0中的字节0x83:无效的开始字节

Python json.loads错误:';utf-8';编解码器可以';t解码位置0中的字节0x83:无效的开始字节,python,json,rest,python-requests,Python,Json,Rest,Python Requests,突然,我开始从这个URL得到JSON响应的解码错误: 我找不到任何不符合UTF-8的角色 Python 3.8: 导入json 导入请求 url=”https://stockx.com/api//browse?productCategory=sneakers&sort=featured&order=DESC&_search=CQ4227-030&数据类型=产品“ 标题={ “接受”:“text/html,application/xhtml+xml,application/xml;q=0.9,i

突然,我开始从这个URL得到JSON响应的解码错误:

我找不到任何不符合UTF-8的角色

Python 3.8:

导入json
导入请求
url=”https://stockx.com/api//browse?productCategory=sneakers&sort=featured&order=DESC&_search=CQ4227-030&数据类型=产品“
标题={
“接受”:“text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,”
'应用程序/签名交换;v=b3;q=0.9',
“接受编码”:“gzip,deflate,br”,
‘接受语言’:‘en-US,en;q=0.9’,
“连接”:“保持活动状态”,
“主机”:“stockx.com”,
‘TE’:‘拖车’,
“升级不安全请求”:“1”,
“用户代理”:“Mozilla/5.0(Windows NT 6.1;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)”
“Chrome/89.0.4389.128 Safari/537.36”
}
my_response=requests.get(url,headers=headers)
如果my_response.ok:
j_data=json.load(my_response.content)
打印(j_数据)

注意,my_response.encoding返回“utf-8”从标题中删除
接受编码。此外,您还可以对响应对象使用
.json()
方法:

import json
import requests


url = "https://stockx.com/api//browse?productCategory=sneakers&sort=featured&order=DESC&_search=CQ4227-030&dataType=product"

headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,"
    "application/signed-exchange;v=b3;q=0.9",
    # "Accept-Encoding": "gzip, deflate, br",   # <--- remove the Accept-Encoding header
    "Accept-Language": "en-US,en;q=0.9",
    "Connection": "keep-alive",
    "Host": "stockx.com",
    "TE": "Trailers",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
    "Chrome/89.0.4389.128 Safari/537.36",
}

my_response = requests.get(url, headers=headers)
if my_response.ok:
    j_data = my_response.json()
    # j_data = json.loads(my_response.content)
    print(json.dumps(j_data, indent=4))

从标题中删除
Accept Encoding
。此外,您还可以对响应对象使用
.json()
方法:

import json
import requests


url = "https://stockx.com/api//browse?productCategory=sneakers&sort=featured&order=DESC&_search=CQ4227-030&dataType=product"

headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,"
    "application/signed-exchange;v=b3;q=0.9",
    # "Accept-Encoding": "gzip, deflate, br",   # <--- remove the Accept-Encoding header
    "Accept-Language": "en-US,en;q=0.9",
    "Connection": "keep-alive",
    "Host": "stockx.com",
    "TE": "Trailers",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
    "Chrome/89.0.4389.128 Safari/537.36",
}

my_response = requests.get(url, headers=headers)
if my_response.ok:
    j_data = my_response.json()
    # j_data = json.loads(my_response.content)
    print(json.dumps(j_data, indent=4))

从我的测试来看,“接受编码”头似乎将其强制为无法读取的字节。如果您希望请求为纯文本,只需删除此标题并打印my_response.text,否则,只需从我的测试中了解如何处理您请求的编码,似乎“Accept Encoding”标题将其强制转换为无法读取的字节。如果您希望请求为纯文本,只需删除此标题并打印我的_response.text,否则,只需学习如何处理您请求的编码

我可以确认我可以从该URL解析响应(不同的语言、不同的操作系统,但JSON似乎不是问题),我也尝试过并为我工作@Everett,更像我直接访问时的编码是“内容编码br”。所以唯一的区别就是环境!我可以确认我可以解析来自那个URL的响应(不同的语言,不同的操作系统,但JSON似乎不是问题),我也尝试过并且为我工作@Everett,更像我直接访问时的编码是“内容编码br”。所以唯一的区别就是环境!