我正在尝试使用Content-Type of' form-data'来上传文件。在Perl中使用HTTP :: Request。
代码如下所示:
$request = POST $URL,
$headers,
Content_Type => 'form-data',
Content => [
'filename' => $args->{ formData }->{ filename },
'options' => $args->{ formData }->{ options }
];
$ header使用以下方式构建:
my $headers = HTTP::Headers->new();
while ( my ( $name, $value ) = each %{ $args->{ headers } } ) {
$headers->header( $name, $value );
}
当使用此调用调用其他不执行文件上载的内容时,这是完美的工作:
$request = HTTP::Request->new( 'POST', $uri, $headers );
当我查看文件上传调用的输出时,它没有除以下内容之外的任何标题信息:
Content-Length: 918
Content-Type: multipart/form-data; boundary=xYzZY
但是,还有另一个值集应该在那里。
如果我删除" $ header"输出是相同的。我也尝试过使用
HEADERS => $headers,
但这只会生成一个标题,标题为HEADERS,值为HASH(0x ........)
我也尝试添加
X-key-name => $value,
但这会产生错误。用引号包围密钥并不会将其添加到标题中。
即使是一个包含文件上传和标题的POST的示例,我也过去几个小时都没有找到。
我的想法已经不多了。
答案 0 :(得分:2)
请注意
HTTP::Request::Common::POST(...)
与
不同HTTP::Request->new(POST => ...)
但参数不同。
中的文档 POST $url
POST $url, Header => Value,...
POST $url, $form_ref, Header => Value,...
POST $url, Header => Value,..., Content => $form_ref
POST $url, Header => Value,..., Content => $content
没有记录的方法可以使用HTTP :: Headers对象作为第二个参数。