LWP::Simple get 的结果被截断
我正在使用 perl 对 url 执行 get 请求,结果似乎被截断。
如果我运行,
curl myurl | wc -l
结果是 1823,如果我创建以下文件 foo.pl:
#!/usr/bin/perl
my $url = 'myurl';
use LWP::Simple;
my $content = get $url;
die "Couldn't get $url" unless defined $content;
print $content;
并运行,
./foo.pl | wc -l
结果会从 1300 左右到偶尔 1823 不等。手动检查输出显示,使用 perl 时输出在中线被破坏。
可能是什么原因造成的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果关闭缓冲会发生什么?我也同意 Karsten S. 检查 http 标头是否有错误代码的观点。最后,我还尝试将内容存储到数组中,看看会发生什么。
要关闭缓冲,您只需在脚本顶部的
use
语句之后放置一个$|++
即可。再次,在黑暗中射击。要检查 http 标头,您可以使用
CGI
。这是一个小网站,其中提供了有关如何从请求中获取标头的好示例:http://www.velocityreviews.com/forums/t24118-re-lwp-simple-header-information-problems.html
最后,尝试使用数组,
@contents< /code>,存储来自网络服务器的内容而不是标量
$contents
。我过去曾有过这样的情况:从远程服务器传递的某些内容被 Perl 错误地解释为列表。我不确定 LWP::Simple 是否能解释这些时间,但尝试一下总没有坏处。您可能只获得一部分数据,其余数据要么被覆盖,要么完全被忽略。将数据放入数组中可以帮助确定是否发生这种情况。What happens if you turn buffering off? I also agree with Karsten S. in checking the http headers for erroneous codes. Finally, I'd also try storing the contents into an array just to see what happens.
To turn off buffering, you could simply place a
$|++
at the top of your script after youruse
statements. Again, a shot in the dark.To examine the http headers, you can use
CGI
. Here's a little site with a good example on how to get the headers from the request:http://www.velocityreviews.com/forums/t24118-re-lwp-simple-header-information-problems.html
Finally, try using an array,
@contents
, to store the contents from the webserver instead of a scalar,$contents
. I've had times in the past where something is passed from the remote server that Perl misinterprets as a list. I'm not sure ifLWP::Simple
accounts for these times but it can't hurt to try. You might only be getting one part of the data and the rest is either getting overwritten or ignored altogether. Placing the data into an array could help determine if that is happening.