使用Perl实现HTTP多部分响应

10

是否可以像多部分请求一样提供HTTP多部分响应?场景是这样的,我想提供一个URL,该URL需要一个EmployeeID参数,然后返回的响应应包括员工的照片、最新的薪资单以及姓名、年龄和地址等信息。接收端不是浏览器,而是一个程序,它会获取这个响应并稍后处理它们。有什么想法吗?

为了更详细地回答我的问题,我必须向我的朋友提供一个URL,他将以编程方式接收响应。例如:

$response = $ua->request($my_url)

我的应用程序不仅需要响应数据,还需要响应文件!有人要求我使其返回多部分响应。


2
@srikanth-vittal 这个 https://gist.github.com/1391017 应该能帮助你入门。 - chansen
@chansen 谢谢链接。那正是我正在寻找的。我也更新了我的问题,加入了更多细节。 - Srikanth Vittal
2
一个管理员重新打开了这个问题,并删除了一些与此评论相关的评论,使现有的评论脱离了上下文,我希望有一个选项能显示完整的历史记录,包括管理员的无能。 - chansen
1个回答

8
我将我的原始代码https://gist.github.com/1391017作为响应提交。
#!/usr/bin/perl
use strict;
use warnings;

use HTTP::Response;

my $response = HTTP::Response->new(
    200, 'OK', [ 'Content-Type' => 'multipart/form-data' ]
);

$response->protocol('HTTP/1.1');
$response->date(time);
$response->server('Foo/1.0');

my $name = HTTP::Message->new([
    'Content-Type'        => 'text/plain; charset=UTF-8',
    'Content-Disposition' => 'form-data; name="name"',
], 'John Doe');

$response->add_part($name);

my $note = HTTP::Message->new([
    'Content-Type'        => 'text/plain; charset=UTF-8',
    'Content-Disposition' => 'form-data; name="note"',
], <<'NOTE');
Resources:
  o http://search.cpan.org/dist/HTTP-Message/lib/HTTP/Message.pm
  o http://search.cpan.org/dist/HTTP-Message/lib/HTTP/Response.pm
  o http://tools.ietf.org/html/rfc2388
  o http://tools.ietf.org/html/rfc2616
NOTE

$response->add_part($note);

my $blob = HTTP::Message->new([
    'Content-Type'        => 'application/octet-stream',
    'Content-Disposition' => 'form-data; name="blob"; filename="blob.bin"',
]);
$blob->add_content('a chunk');
$blob->add_content(' of data');

$response->add_part($blob);

print $response->as_string;

输出:

HTTP/1.1 200 OK
Date: Thu, 24 Nov 2011 10:03:25 GMT
Server: Foo/1.0
Content-Type: multipart/form-data; boundary=xYzZY

--xYzZY
Content-Type: text/plain; charset=UTF-8
Content-Disposition: form-data; name="name"

John Doe
--xYzZY
Content-Type: text/plain; charset=UTF-8
Content-Disposition: form-data; name="note"

Resources:
  o http://search.cpan.org/dist/HTTP-Message/lib/HTTP/Message.pm
  o http://search.cpan.org/dist/HTTP-Message/lib/HTTP/Response.pm
  o http://tools.ietf.org/html/rfc2388
  o http://tools.ietf.org/html/rfc2616

--xYzZY
Content-Type: application/octet-stream
Content-Disposition: form-data; name="blob"; filename="blob.bin"

a chunk of data
--xYzZY--

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