2008-09-05 78 views
2

我正在使用perl腳本向Google Appengine應用程序發佈POST。我使用-F選項發佈包含一些XML的文本文件。如何爲POST請求獲取正確的內容長度

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將字符附加到文件的末尾,並且始終截斷文件中的行數。我想我可以通過遍歷服務器端的每個字符來找出添加的內容,但不值得。這甚至沒有回答在谷歌組設置爲應用程序引擎!

回答

3

您需要的額外字節數等於文件中的行數?我問,因爲也許它有可能以某種方式引入回車,但不計算在內。

0

你是如何得到字節數? ..通過查看文件系統上文件的大小?

您可以使用「-s」來獲取文件的大小。

或者,如果你想要做的更多,你可以使用File::Stat

1

我以前遇到類似的問題。

我假設你正在使用length()函數來確定文件的大小?如果是這樣,它可能是你發佈的數據是UTF-8編碼,而不是ASCII。

要獲得正確的計數,您可能需要添加「使用字節數」編譯你的腳本的頂部,或在一個塊包住長呼:

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

從perlfunc手冊頁:

「注意字符:如果EXPR是採用Unicode,你會獲取字符數,而不是字節數。「