从servlet返回的HttpsUrlConnection响应在通过python库读取时包含额外的'b''0''\ r \ n'个字符

问题描述 投票:0回答:1

我正在使用HttpsURLConnection来调用服务器并从我的servlet返回从HttpsURLConnection返回的响应。我正在使用流将来自HttpssURLConnection的响应复制到HttpServletresponse,将来自httpconnection响应输入流的字节复制到响应的输出流,通过查看read是否返回<0来检查结束。

以下是复制响应的代码。变量response的类型为HttpServletResponse,变量httpCon的类型为HttpsURLConnection

InputStream responseStream = httpCon.getInputStream();    
if (responseStream != null)
{
  OutputStream os = response.getOutputStream();
  byte[] buffer = new byte[1024];
  int len;
  while ((len = responseStream.read(buffer)) >= 0)
  {
    os.write(buffer, 0, len);
  }
  os.flush();
  os.close();
}

在客户端,我使用python请求库来读取响应。

我看到的是,如果我使用curl测试我的servlet,我得到正确的响应json,response = u'{"key":"value"}'

如果我从请求python中读取它,它会在响应中添加一些额外的字符,响应看起来像下面的response = u'b0\r\n{"key":"value"}\r\n0\r\n\r\n'

两个字符串都是unicode。但第二个有额外的角色。

如果我尝试使用curl / Postman restclient同样的共鸣,我能够正确地得到它。但是从python请求来看,它无法正常工作。我在python中尝试了另一个livetest库,但是它也没有用,并且响应具有相同的字符。我也尝试更改accept-encoding标头,但它没有任何效果。

因此,我无法解析json。我不想更改客户端来解析这种字符串。我可以在服务器上更改某些内容以使其正常工作吗?

java python servlets python-requests httpsurlconnection
1个回答
0
投票

响应是否包含以下标题“Transfer-Encoding:chunked”?

响应应该是Chunked transfer encoding https://en.wikipedia.org/wiki/Chunked_transfer_encoding

在这种情况下,您会在响应结束时获得\ r \ n0 \ r \ n \ r \ n,因为它正在终止此编码的符号。我客人卷曲/邮差只是帮我们处理Chunked传输编码,所以你找不到这些分块符号。

© www.soinside.com 2019 - 2024. All rights reserved.