【问题标题】:Perl "Premature end of script headers" errorPerl“脚本头过早结束”错误
【发布时间】:2012-04-01 02:17:00
【问题描述】:

所以我正在使用 Windows 7 和 Xampp 运行 localhost 测试服务器。我正在开发一个可以抓取网络的网络爬虫,但是当我在浏览器中打开它时,我得到了脚本头错误的过早结束。我以为我是从不包括“print”Content-Type:text/html\n\n“;”中得到这个的这通常是问题..但不是。

这是我正在使用的代码:

#!"\xampp\perl\bin\perl.exe"
print "Content-Type: text/html\n\n";
use strict; 
use warnings;

use LWP::Simple;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
use HTML::LinkExtor;

open my $file1,"+>>", ("links.txt");
select($file1);  

my @urls = ('http://www.youtube.com/');

my $browser = LWP::UserAgent->new('IE 6');
$browser->timeout(10);


while (@urls) {
  my $url = shift @urls;
  my $request = HTTP::Request->new(GET => $URL);
  my $response = $browser->request($request);

  if ($response->is_error()) {printf "%s\n", $response->status_line;}
  my $contents = $response->content();

  my ($page_parser) = HTML::LinkExtor->new(undef, $url);
  $page_parser->parse($contents)->eof;
  @links = $page_parser->links;

  foreach $link (@links) {
    push @urls, $$link[2];  # Add link to list of urls before printing it
    print "$$link[2]\n";
  }

  sleep 60;
}

【问题讨论】:

标签: perl cgi


【解决方案1】:
我以为我是从不包括print "Content-Type: text/html\n\n"; 得到这个的

不完全是。您没有证明 print 已运行,也没有证明 print 在其他输出之前已运行。

肯定发生了编译时错误,在这种情况下,print 语句永远不会被执行。检查您的网络服务器的错误日志以了解实际错误。

【讨论】:

    【解决方案2】:

    乍一看,您在上面发布的代码包含几个阻止其执行的错误:首先$URL@links$link 未声明(请记住您在strict 下)。然后另一个问题是LWP::UserAgent->new() 不接受奇数个参数(因为它需要一个哈希)。

    由于您得到的错误可能只是意味着脚本在向 Web 服务器返回任何输出之前停止,原因可能就是这些错误。

    首先从命令行运行脚本会很有帮助,只是检查它是否返回任何内容。

    更新

    是的,只需纠正上述错误,您的脚本似乎就可以工作(在 Linux 上,从命令行)。 它仍然会产生几个警告(并执行一些不必要的操作),也应该消除这些警告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 2013-07-09
      • 2012-12-03
      • 1970-01-01
      • 2012-06-09
      • 2011-05-28
      相关资源
      最近更新 更多