2013-05-14 72 views
1

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

#!/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

是基于JavaScript的另一端? – snoofkin 2013-05-14 13:40:28

+0

不,现在他们实际上是直接点击这个脚本,请注意客户端不是浏览器,它是一个生成原始HTTP命令的设备。该脚本仅用于测试设备。最初它是html/perl CGI,但现在它们只是直接调用perl脚本并传递查询字符串,如POST /test.cgi?12345 HTTP/1.1主机:myhost.com – GL2014 2013-05-14 13:43:23

回答

2

很高兴看到在sysadmin字段中涉及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()电话也是如此。

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

+0

好帖子。我只是想补充一点,使用CGI.pm的html输出功能已经在很大程度上被诸如HTML :: Template之类的模块的简单性所取代。 CGI.pm主要用于请求处理,但不是用于输出。 HTML :: Template有助于将输出(视图)与代码分离(即向MVC方向迈出一步) – DavidO 2013-05-14 16:25:51

+0

我只是想将任意字节数组和文件流发送回客户端用于测试目的。它不会不管它们包含什么,但为简单起见应该相对较小。 – GL2014 2013-05-14 17:26:36

+0

我向开发人员发送了一封电子邮件以进行澄清,结果证明我给他们的代码就足够了。如果任何人能够破译他们可能想要的并向我展示代码,那很酷。我将尽力在Perl上做得更好,所以下次我将为这项任务做好准备。 – GL2014 2013-05-14 17:37:26