1

我需要能够发送文件流和字节数组作为对 HTTP POST 的响应,以测试产品。我在后端使用 CGI perl,但我对 Perl 还不是很熟悉,而且我不是开发人员,我是 Linux 管理员。发送基于查询字符串的字符串非常容易,但我坚持这两个要求。下面的脚本将根据查询字符串返回正确或不正确的页面。如何添加逻辑以返回文件流和字节数组?

#!/usr/bin/perl
use CGI ':standard';

print header();
print start_html();

my $query = new CGI;
my $value = $ENV{'QUERY_STRING'};


my $number = '12345';

if ( $value == $number ) {
print  "<h1>Correct Value</h1>\n";
} else {
print "<h1>Incorrect value, you said: $value</h1>\n";
}
print end_html();
4

1 回答 1

2

很高兴看到系统管理员领域的新人涉足 Perl。这正是我开始的方式。

首先,如果您要使用 CGI.pm 模块,我建议您在整个脚本中使用它来发挥您的优势。在您之前输入的地方,<h1>您可以使用您的 CGI 对象为您执行此操作。最后,您将得到更清晰、更易于管理的代码:

#!/usr/bin/perl
use CGI ':standard';

print header();
print start_html();

my $value = $ENV{'QUERY_STRING'};
my $number = '12345';

if ( $value == $number ) {
    h1("Correct Value");
} else {
    h1("Incorrect value, you said: $value");
}

print end_html();

请注意,您的比较运算符 ( ==) 仅在这是一个数字时才有效。要使其也适用于字符串,请使用eq运算符。

稍微澄清一下您对文件流和字节数组的含义……通过文件流,您的意思是要向客户端打印文件吗?如果是这样,这将很简单:

open(F,"/location/of/file");
while (<F>) {
    print $_;
}
close(F);

这将打开链接到指定文件的文件句柄,只读,逐行打印内容,然后关闭它。请记住,这将按原样打印文件,并且在 HTML 页面中看起来不漂亮。如果您将 Content-type 标头更改为“text/plain”,这可能会更符合您要查找的内容。为此,请将打印 HTTP 标头的调用修改为:

 print header(-type => 'text/plain');

如果你走这条路,你也会想删除你的start_html()end_html()电话。

至于字节数组,我想我需要更多关于正在打印的内容以及您希望它如何格式化的信息。

于 2013-05-14T16:11:04.920 回答