将压缩负载从Java客户端(Unirest)发布到Flask Api时出现以下错误
[发布]>;。错误400错误请求:未能解码JSON对象:“utf-8”编解码器无法解码位置1中的字节0x8b:解压缩时起始字节无效\“,)。在加载中\n s=s.decode(encoding)\nUnicodeDecodeError:“utf-8”编解码器无法解码位置1中的字节0x8b:无效的开始字节\n\n在处理上述异常时,发生了另一个异常
有效负载以压缩格式传递。post请求在python测试代码中运行良好
我有以下java post请求。
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)
以下是Pyton测试代码
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'})
在Java和python测试用例中,头是不同的
Java头是“接受编码”、“gzip”
python头是“内容编码”:“gzip”
如果request.content\u编码为“gzip”,则存在签入post方法。这种情况是对Java代码进行归档并导致问题。使两种情况下的标题相同。代码运行良好
相关问题 更多 >
编程相关推荐