Ich verwende ein Perl-Skript zum POST zur Google Appengine-Anwendung. Ich poste eine Textdatei, die XML enthält, mit der Option -F.So erhalten Sie die richtige Inhaltslänge für eine POST-Anfrage
http://www.cpan.org/authors/id/E/EL/ELIJAH/bget-1.1
Es gibt eine Version 1.2, die bereits getestet und das gleiche Problem bekommen. Der Beitrag sieht ungefähr so aus.
Host: foo.appspot.com
User-Agent: lwp-request/1.38
Content-Type: text/plain
Content-Length: 202
<XML>
<BLAH>Hello World</BLAH>
</XML>
Ich habe das Beispiel geändert, so dass die 202 nicht richtig ist, mach dir keine Sorgen darüber. Auf zum Problem. Die Inhaltslänge stimmt mit der Anzahl der Bytes in der Datei überein. Wenn ich jedoch die Inhaltslänge nicht manuell heraufsetze, werden nicht alle Bytes der Datei abgeschnitten. Die Anzahl der abgeschnittenen Bytes ist bei Dateien unterschiedlicher Größe nicht identisch. Ich benutzte die Option -r auf dem Skript und ich kann sehen, was es sendet und es sendet die ganze Datei, aber Google Appengine self.request.body zeigt, dass nicht alles empfangen wird. Ich denke, die Lösung ist, die richtige Zahl für Content-Length zu bekommen, und anscheinend ist es nicht so einfach wie die Anzahl der Bytes in der Datei oder das Perl-Skript macht es irgendwie kaputt.
Update: Danke an Erickson für die richtige Antwort. Ich habe printf verwendet, um Zeichen an das Ende der Datei anzuhängen, und es hat immer genau die Anzahl der Zeilen in der Datei abgeschnitten. Ich denke, ich konnte herausfinden, was hinzugefügt wird, indem ich jedes Zeichen auf der Serverseite durchlaufe, aber es nicht wert ist. Dies wurde nicht einmal auf die Google-Gruppen für App-Engine beantwortet beantwortet!