【问题标题】:Perl create byte array and file streamPerl 创建字节数组和文件流
【发布时间】:2013-05-14 13:29:44
【问题描述】:

我需要能够发送文件流和字节数组作为对产品测试的 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();

【问题讨论】:

  • 另一端是基于 JavaScript 的吗?
  • 不,现在他们实际上是直接点击这个脚本,请注意客户端不是浏览器,它是一个发出原始 HTTP 命令的设备。此脚本仅用于测试设备。最初它是 html/perl CGI,但现在他们只是直接调用 perl 脚本并传递一个查询字符串,如 POST /test.cgi?12345 HTTP/1.1 Host: myhost.com

标签: perl cgi bytearray bytearrayoutputstream


【解决方案1】:

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

首先,如果您要使用 CGI.pm 模块,我建议您在整个脚本中使用它来发挥您的优势。在您之前输入 &lt;h1&gt; 的地方,您可以使用您的 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() 电话。

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

【讨论】:

  • 好帖子。我只是想补充一点,使用 CGI.pm 的 html 输出功能在很大程度上已被 HTML::Template 等模块的简单性所取代。 CGI.pm 主要用于请求处理,但不太用于输出。 HTML::Template 便于将输出(视图)从代码中分离出来(即朝着 MVC 方向迈出一步)
  • 我只是想将任意字节数组和文件流发送回客户端以进行测试。它们包含什么并不重要,但为了简单起见应该相对较小。跨度>
  • 我向开发人员发送了一封电子邮件以进行澄清,结果证明我给他们的代码就足够了。如果有人能够破译他们可能想要的东西并向我展示代码,那就太酷了。我会努力在 Perl 上做得更好,所以下次我会为这项任务做好准备。
猜你喜欢
  • 2021-02-28
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多