【发布时间】:2016-03-01 20:02:11
【问题描述】:
我正在使用 HttpsURLConnection 调用服务器并从我的 servlet 返回从 HttpsURLConnection 返回的响应。我正在使用流将响应从 HttpssURLConnection 复制到 HttpServletresponse,将字节从 httpconnection 响应输入流复制到响应的输出流,通过查看 read 是否返回
以下是复制响应的代码。变量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 库,它也不起作用,响应具有相同的字符。我也尝试更改接受编码标头,但没有任何效果。
因此,我无法解析 json。 我不想更改客户端来解析这种字符串。 我可以更改服务器上的某些内容以使其正常工作吗?
【问题讨论】:
-
显示复制代码?
-
更新了用于复制响应的代码
-
是的,复制代码很好。响应前面的 u 是怎么回事?您确定您在 Python 中以 unicode 格式阅读吗?可能是编码不匹配...
-
u 是 unicode。我只是在 python 中使用 requests 库。
-
你可以忽略 u,它不是字符串的一部分,而在另一种情况下,字符 b0\r\n 是字符串的一部分。
标签: java python servlets python-requests httpsurlconnection