我试图通过perl发送http标头来强制下载文件。目前的代码如下:
#!/usr/bin/perl
use strict;
use Session;
use CGI::Carp qw(fatalsToBrowser);
use HTTP::Headers;
HTTP::Headers->new(
Content_type => 'text/plain',
Content_disposition => 'attachment; filename=export.txt',
);
print 'just some text';
exit;
我还包含了HTTP::Headers
但是当我运行它时,它打印出文本而不是下载内容......
答案 0 :(得分:3)
你只是在构建HTTP::Headers
,但它从未打印到stdout。所以你还必须调用as_string
方法:
my $h = HTTP::Headers->new(
Content_type => 'text/plain',
Content_disposition => 'attachment; filename=export.txt',
);
print $h->as_string;
但这只是打印HTTP标头而没有标题和正文之间的分隔符。如果您想让libwww-perl为您执行此操作,您还可以使用HTTP::Message
:
use HTTP::Headers;
use HTTP::Message;
my $h = HTTP::Headers->new(
Content_type => 'text/plain',
Content_disposition => 'attachment; filename=export.txt',
);
my $content = 'just some text';
my $msg = HTTP::Message->new($h, $content);
print $msg->as_string;
更正确一点,你应该使用“\ r \ n”作为行终止符:
print $msg->as_string("\015\012");
另一种方法是使用CGI.pm
,并使用header
方法,该方法可用于设置响应HTTP标头。实际上,使用CGI.pm
比使用HTTP::*
类更常见。在处理LWP::UserAgent
到获取网页时,后者更常用。
答案 1 :(得分:2)
当您使用CGI时,可以通过CGI以这样的方式打印标题时设置它:
my $q = CGI->new();
print $q->header(
-type => 'text/plain',
-charset => 'iso-8859-1',
-attachment => 'filename.txt',
);
答案 2 :(得分:1)
好吧我想出了一个更简单的方法......
而不是使用HTTP::Headers
我只打印出以下几行:
print"Content-type:text/plain\n";
print"Content-disposition:attachment; filename=export.txt\n\n";
这就是诀窍......
答案 3 :(得分:0)
这是使用CGI模块的代码:
use CGI qw(:standard);
print header(-type => "text/plain", -content_disposition => "attachment; filename=filename=export.txt");
print "just some text";