Полученная длина отличается от отправленной длины

98
9

Я использую приложение 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. Однако в Python, когда я запускаю это:

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

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

Числа cl и len(rawbody) различны.

Как это может быть?

спросил(а) 2020-04-04T01:07:28+03:00 5 месяцев, 4 недели назад
1
Решение
119

ваш сервер может отправить "закрытый заголовок", поэтому клиент не будет для него конечным потоком.

ответил(а) 2020-04-04T01:23:45.680147+03:00 5 месяцев, 4 недели назад
41

Возможно, вы забыли закрыть поток с out.close(); ?

ответил(а) 2020-04-04T01:07:28+03:00 5 месяцев, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема