Perl HTTP ::带文件上载的请求忽略标题

时间:2015-07-10 21:22:26

标签: perl http-headers httprequest

我正在尝试使用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的示例,我也过去几个小时都没有找到。

我的想法已经不多了。

1 个答案:

答案 0 :(得分:2)

请注意

 HTTP::Request::Common::POST(...)

不同
HTTP::Request->new(POST => ...)

但参数不同。

根据HTTP::Request::Common

中的文档
   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对象作为第二个参数。