将压缩的有效负载从 Java 客户端 (Unirest) 发布到 Flask Api 时出现以下错误。
[发布]>。错误 400 错误请求:无法解码 JSON 对象:“utf-8”编解码器无法解码位置 1 中的字节 0x8b:解压缩时起始字节无效。\",). in loading\ns = s.decode(encoding)\nUnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte\n\n在处理上述异常时,又出现了一个异常发生了
有效负载以压缩格式传递。发布请求在 python 测试代码中运行良好。
我有以下 java 发布请求。
public void PostData() throws Exception {
String payload = "{\"FirstName\": \"ABC\", \"LastName\": \"XYZ\"}";
ByteArrayOutputStream obj = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(obj);
gzip.write(payload.getBytes("UTF-8"));
gzip.close();
HttpResponse<JsonNode> jsonResponse
= Unirest.post("http://localhost:5000/service")
.header("Accept-Encoding", "gzip")
.body(obj.toByteArray())
.asJson();
}
以下 python 代码正在接收请求。 修改代码以使其有点简单。代码在 .decode('utf8') 处失败
def post(self):
payload = json.loads(gzip.decompress(request.data).decode('utf8')) if request.content_encoding is 'gzip' else request.get_json('data')
return Response(payload, status=201)
以下是工作 pyhton 测试代码
def test_post(self):
payload = {'FirstName': 'ABC', 'LastName': 'XYZ'}
payload = gzip.compress(json.dumps(payload).encode())
resp = self._client.post('/service', data=payload, headers={'Content-Encoding': 'gzip'})