4

我正在使用现有框架来自动化一些 api。该框架使用 HTTP::Request 模块。我需要编写一个脚本来上传文件。我可以使用 HTTP::Request::Common 模块做到这一点,但不能使用 Http::Request 模块。但我只需要使用 Http::Request 来完成这项工作。下面的代码片段:

使用 HTTP::Request::Common\This Works

    $request = POST $uri,
    Content_Type => 'multipart/form-data',
    Content => [
    file => [$file]
    ]
    ;
    my $results=$ua->request($request ) ;

使用 HTTP::Request\This 不起作用,我收到错误丢失文件

    my $req = HTTP::Request->new("POST", $uri );
    $req->header(Content_Type => "form-data");
    $req->content('file=>$file');
    my $res = $ua->request($req);

有人可以告诉我我在上面的代码中做错了什么吗?

4

1 回答 1

6

不幸的是,该POST方法中发生的不仅仅是包装HTTP::Request对象的构造函数(参见此处)。至少包括以下内容(通过快速扫描代码):

  • 将 Content-Type 标头修改为multipart/form-data随机boundary以指示文件数据在请求中的开始位置
  • 将 Content-Disposition 标头设置为适当的值
  • 读取文件并将文件内容存储在请求正文中

我强烈建议不要尝试手动执行上述所有操作,但很难知道您的确切限制以及为什么不能使用HTTP::Request::Common.

于 2012-10-10T13:37:42.437 回答