我需要能够发送文件流和字节数组作为对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();
答案 0 :(得分: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()
来电。
至于字节数组,我想我需要更多关于正在打印的内容以及你希望如何格式化的信息。