Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何为POST请求获取正确的内容长度_Perl_Google App Engine_Https - Fatal编程技术网

Perl 如何为POST请求获取正确的内容长度

Perl 如何为POST请求获取正确的内容长度,perl,google-app-engine,https,Perl,Google App Engine,Https,我正在使用perl脚本发布到Google Appengine应用程序。我使用-F选项发布了一个包含一些XML的文本文件 有一个版本1.2,已经过测试,并得到相同的问题。这篇文章看起来像这样 Host: foo.appspot.com User-Agent: lwp-request/1.38 Content-Type: text/plain Content-Length: 202 <XML> <BLAH>Hello World</BLAH> </

我正在使用perl脚本发布到Google Appengine应用程序。我使用-F选项发布了一个包含一些XML的文本文件

有一个版本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>
主机:foo.appspot.com
用户代理:lwp请求/1.38
内容类型:文本/纯文本
内容长度:202
你好,世界
我已经修改了示例,所以202不正确,不用担心。关于这个问题。内容长度与文件上的字节数匹配,但是,除非我手动增加内容长度,否则它不会发送所有文件,否则会截断一些字节。对于不同大小的文件,截断的字节数不同。我在脚本上使用了-r选项,我可以看到它正在发送什么,它正在发送所有的文件,但是Google Appengine self.request.body显示并不是所有的文件都收到了。我认为解决方案是获得内容长度的正确数字,显然它不像文件上的字节数那么简单,或者perl脚本不知何故弄乱了它

更新:
感谢埃里克森的正确答案。我使用printf将字符附加到文件的末尾,它总是精确地截断文件中的行数。我想我可以通过遍历服务器端的每个字符来找出添加了什么,但这并不值得。这甚至没有在为AppEngine设置的google群组上得到回答

所需的额外字节数是否等于文件中的行数?我之所以这么问,是因为可能是由于某种原因引入了回车,但没有计数。

您是如何获得字节数的。。通过查看文件系统上文件的大小

您可以使用“-s”获取文件的大小


或者,如果您想做得更多,可以使用

我以前遇到过类似的问题

我假设您正在使用length()函数来确定文件的大小?若有,原因为何;;您发布的数据可能是UTF-8编码的,而不是ASCII

要获得正确的计数,您可能需要在脚本顶部添加一个“use bytes;”pragma,或者将长度调用包装在一个块中:

my $size;
do {use bytes; $size = length($file_data)}
从perlfunc手册页:

注意字符:如果EXPR是Unicode格式,则您将获得字符数,而不是字节数