【问题标题】:malformed header from script. Bad header=<!DOCTYPE html>来自脚本的格式错误的标头。错误的标头=<!DOCTYPE html>
【发布时间】:2011-06-15 09:22:20
【问题描述】:

我在 perl 脚本上收到以下服务器错误:

来自脚本的格式错误的标头。坏的 标题=: youtube_perl.pl,

这是我的源代码:


#!"C:\XAMPP\perl\bin\perl.exe" -T

use strict;
use warnings;

use CGI;
use CGI::Carp qw/fatalsToBrowser/;
use WWW::Mechanize;

my $q = CGI->new;

my $url = 'http://www.youtube.com';

my $mechanize = WWW::Mechanize->new(autocheck => 1);

$mechanize->get($url);

my $page = $mechanize->content();

print $page;

提前致谢!

【问题讨论】:

    标签: perl header perl-module www-mechanize


    【解决方案1】:

    想通了。在我尝试打印页面之前必须添加以下内容:

    print "Content-type: text/html\n\n";
    

    我猜如果不先定义标题,perl 是无法打印 html 页面的。

    【讨论】:

    • @user589294 - 不,Perl 可以打印它们。但它们不是有效的 HTTP 响应。因此,如果您希望通过 HTTP 传输由 Perl 打印的 HTML 页面,您需要实际打印完整的 HTTP 响应 - 与 Perl 无关
    • 当然 Perl 可以打印没有标题的 HTML 页面!但是,您不能在不打印标题的情况下编写 CGI 脚本。更好的是:print $q-&gt;header();。见perldoc CGI
    • 您应该使用\x0D\x0A 而不是\n 作为使用HTTP 时的EOL。 HTTP 指定行应以 CR-LF 终止,而 \n 是当前环境的行尾标记,\n 恰好是 \x0D\x0A,因为您在 Windows 上运行。
    • 谢谢!这行得通!奇怪的是我们的旧脚本在没有这个的情况下工作,有一天停止工作。可能是服务器更新。不确定。有什么想法吗?
    • 在 bash/shell 中 \n 符号在 echo 中未解释,但 echo 自动添加了 \n,因此需要另外一个 echo 命令用于输出
    【解决方案2】:
    print "Content-type: text/html\n\n";
    

    使用\n\n 没有这个它不会打印任何它会给的东西:

    来自脚本错误的格式错误的标题

    在您的错误日志文件中。

    【讨论】:

      猜你喜欢
      • 2022-07-05
      • 2014-05-21
      • 2016-04-21
      • 1970-01-01
      • 2018-09-14
      • 2011-02-14
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多