LWP::Simple get 的结果被截断

发布于 2024-12-20 11:07:52 字数 442 浏览 0 评论 0 原文

我正在使用 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 时输出在中线被破坏。

可能是什么原因造成的?

I'm using perl to perform a get request on a url, and the results appear to be truncated.

If I run

curl myurl | wc -l

the result is 1823, and if I create the following file 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;

and run

./foo.pl | wc -l

the result varies from around 1300 to occasionally 1823. Manually inspecting the output shows that the output is broken mid-line when using perl.

What can be causing this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦年海沫深 2024-12-27 11:07:52

如果关闭缓冲会发生什么?我也同意 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 your use 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 if LWP::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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文