接收长度与发送长度不同

Received length differs from sent length

我正在使用 Android 应用程序将 base64 编码的字符串发送到 CherryPy 服务器。 Android 代码是这样工作的:

URL url = new URL("http://foo.bar/blabla");

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Content-Type", "application/octet-stream");
conn.setDoOutput(true);
conn.setFixedLengthStreamingMode(base64s.length());

OutputStream out = new BufferedOutputStream(conn.getOutputStream());
out.write(base64s.getBytes());

因此,您可以说发送的字节数等于 Content-Length header 中的字节数。但是,在 Python 中,当我 运行 这个:

cl = cherrypy.request.headers['Content-Length']
rawbody = cherrypy.request.body.read()

print "{} bytes, {}".format(len(rawbody), cl)

数字cllen(rawbody)不同。

怎么可能?

你的服务器应该发送一个 "close header" 这样客户端就不会为他发送结束流。

也许您忘记用 out.close(); 关闭流?