Я использую Perl-скрипт для POST в приложении Google Appengine. Я публикую текстовый файл, содержащий XML, используя опцию -F.
http://www.cpan.org/authors/id/E/EL/ELIJAH/bget-1.1
Существует версия 1.2, уже протестированная и получившая такую же проблему. Пост выглядит примерно так.
Host: foo.appspot.com
User-Agent: lwp-request/1.38
Content-Type: text/plain
Content-Length: 202
<XML>
<BLAH>Hello World</BLAH>
</XML>
Я изменил пример, чтобы 202 не был прав, не беспокойтесь об этом. На проблему. Content-Length соответствует количеству байтов в файле, однако, если я не увеличу Content-Length вручную, он не отправит весь файл, несколько байтов будут усечены. Количество усеченных байтов не одинаково для файлов разных размеров. Я использовал опцию -r в сценарии, и я вижу, что он отправляет и отправляет весь файл, но Google Appengine self.request.body показывает, что не все получено. Я думаю, что решение состоит в том, чтобы получить правильное число для Content-Length, и, очевидно, это не так просто, как количество байтов в файле или скрипт perl каким-то образом его искажают.
Обновление:
Спасибо Эриксону за правильный ответ. Я использовал printf для добавления символов в конец файла, и он всегда обрезал ровно количество строк в файле. Я полагаю, что мог бы выяснить, что добавляется, перебирая каждый символ на стороне сервера, но это того не стоит. На группы Google, настроенные для движка приложений, это даже не ответили!