使用Perl发送POST请求并将Zip文件作为Base64编码发送?

3

我有一个Perl脚本,试图使用LWP UserAgent模块发送zip文件,代码如下:

my $req = POST $url, Content_Type => 'form-data',
    Content      => [
        submit => 1,
        upfile =>  [ $fname ]
    ];

$fname是文件路径。但在服务器端,我的POST数组中只有"submit"。我是否应该将文件进行base64编码并将其分配到一个变量中?这样做的最佳方式是什么?


请发布您的服务器端脚本代码,我认为上面的代码没有问题,所以我怀疑您没有正确获取文件数据。 - Roger
1个回答

2

确保文件名可以被解析。如果不能被解析,你应该会收到一个错误提示,至少在我的版本的HTTP::Request::Common中是这样的。

你不必将二进制内容编码为Base64。(除非服务器端应用程序恰好期望该格式。)

下面是一个完整的示例脚本:

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common 'POST';

my $ua = LWP::UserAgent->new;
my $url = 'http://localhost:8888'; # Fiddler
my $req = POST $url,
    Content_Type => 'form-data',
    Content => [
        submit  => 1,
        upfile  => [ 'C:\temp\bla.zip' ],
    ];
my $line = '=' x 78 . "\n";
print $line, $req->as_string;
my $rsp = $ua->request( $req );
print $line, $rsp->as_string;

啊,我明白了。我本来期望文件会在 $_POST 数组中提交,所以当我没有看到它时,我以为出了什么问题。现在我才意识到它在 $_FILES 数组中,谢谢! - user391986

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接