Domanda

Sto utilizzando uno script Perl per eseguire il POST sull'applicazione Google Appengine.Inserisco un file di testo contenente alcuni XML utilizzando l'opzione -F.

http://www.cpan.org/authors/id/E/EL/ELIJAH/bget-1.1

Esiste una versione 1.2, già testata e che presenta lo stesso problema.Il post assomiglia a questo.

Host: foo.appspot.com
User-Agent: lwp-request/1.38
Content-Type: text/plain
Content-Length: 202

<XML>
   <BLAH>Hello World</BLAH>
</XML>

Ho modificato l'esempio in modo che il 202 non sia corretto, non preoccuparti.Al problema.La lunghezza del contenuto corrisponde al numero di byte nel file, tuttavia, a meno che non aumenti manualmente la lunghezza del contenuto, non viene inviato tutto il file, alcuni byte vengono troncati.Il numero di byte troncati non è lo stesso per file di dimensioni diverse.Ho utilizzato l'opzione -r sullo script e posso vedere cosa sta inviando e sta inviando tutto il file, ma Google Appengine self.request.body mostra che non tutto è stato ricevuto.Penso che la soluzione sia ottenere il numero giusto per Content-Length e apparentemente non è così semplice come il numero di byte sul file o lo script Perl lo sta alterando in qualche modo.

Aggiornamento:Grazie a Erickson per la risposta giusta.Ho usato printf per aggiungere caratteri alla fine del file e troncava sempre esattamente il numero di righe nel file.Suppongo di poter capire cosa viene aggiunto eseguendo l'iterazione di ogni carattere sul lato server, ma non ne vale la pena.A questa domanda non è stata nemmeno data risposta nei gruppi Google configurati per App Engine!

È stato utile?

Soluzione

Il numero di byte aggiuntivi necessari è uguale al numero di righe nel file?Lo chiedo perché forse è possibile che in qualche modo i ritorni a capo vengano introdotti ma non conteggiati.

Altri suggerimenti

Ho già riscontrato problemi simili in passato.

Presumo che tu stia utilizzando la funzione length() per determinare la dimensione del file?In tal caso, è probabile che i dati che stai pubblicando siano codificati UTF-8 anziché ASCII.

Per ottenere il conteggio corretto potrebbe essere necessario aggiungere un "usa byte;" Pragma nella parte superiore della sceneggiatura o avvolgi la chiamata di lunghezza in un blocco:

my $size;
do {use bytes; $size = length($file_data)}

Dalla pagina man di perlfunc:

"Nota i personaggi:se ESPR è in Unicode, otterrai il numero di caratteri, non il numero di byte."

Come ottieni il numero di byte?..Osservando la dimensione del file sul filesystem?

Puoi usare "-s" per ottenere la dimensione del file.

Oppure, se vuoi fare di più, puoi usare File::Stat

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top