HTTP Post。来自Perl中管道/文件句柄的内容主体

时间:2017-08-16 20:39:44

标签: perl stream http-post pipe

我有一个工具,可生成一些数据并将其打印到stdout。 在我的perl脚本中,我需要启动此工具并使用Post请求将生成的数据发送到http服务器。该工具会生成大量数据,将其保存在磁盘上并且只发送它可能非常耗时。所以我真的想要即时发送它,让我们说将stdout重定向到http post请求。 Content-Length应该不是什么大问题,因为我知道数据大小。

我已经尝试过使用回调:

  my @chunk = qw( foo bar baz );
  my $req = HTTP::Request::StreamingUpload->new(
      PUT      => 'http://example.com/foo.cgi',
      callback => sub { shift @chunk },
      headers => HTTP::Headers->new(
          'Content-Type'   => 'text/plain',#and multipart/form-data
          'Content-Length' => 9,
      ),
  );
  my $res = LWP::UserAgent->new->request($req);

并从fh中读到:

 open my $fh, '<', '/your/upload/requestbody' or die $!;
  my $req = HTTP::Request::StreamingUpload->new(
      PUT     => 'http://example.com/foo.cgi',
      fh      => $fh,
      headers => HTTP::Headers->new(
          'Content-Length' => 9,
      ),
  );
  my $res = LWP::UserAgent->new->request($req);

但由于某种原因,它对我不起作用,我收到错误500。 我也确信服务器支持multipart / form-data

有什么例子吗?有没有其他方法可以将stdout重定向到我的http post请求?

1 个答案:

答案 0 :(得分:0)

谢谢大家,我决定创建一个套接字并手动编写数据。工作正常。