2015-07-10 63 views
0

我正尝试使用HTTP :: Request的Perl中的'form-data'的Content-Type来上传文件。Perl HTTP ::带文件上传的请求忽略头文件

的代码看起来是这样的:

$request = POST $URL, 
       $headers, 
       Content_Type => 'form-data', 
       Content => [ 
        'filename' => $args->{ formData }->{ filename }, 
        'options' => $args->{ formData }->{ options } 
       ]; 

$头采用内置:

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 

但是,还有另一个值集应该在那里。

如果我删除“$标题”,输出是相同的。我已用

HEADERS => $headers, 

也尝试但这只是产生具有标头的关键的报头,和HASH值(0X ........)

我还尝试添加

X-key-name => $value, 

但这给出了一个错误。用引号括住该键不会将其添加到标题中。

即使是一个包含文件上传和标题的POST完成的例子,我也一直在寻找过去的几个小时。

我正在用尽想法。

回答

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 ::头对象作为第二个参数没有任何记载的方法。