2017-08-16 8 views
2

私はいくつかのデータを生成し、stdoutに出力するツールを持っています。 私のperlスクリプトでは、私はこのツールを起動し、Post要求を使ってhttpサーバに生成されたデータを送る必要があります。このツールは大量のデータを生成し、ディスクに保存して送信するのに非常に時間がかかることがあります。だから私は本当にそれを送信したい、httpの投稿要求に標準出力をリダイレクトすると言う。 Content-Lengthは大したことではありません。なぜなら私はデータサイズを知っているからです。HTTPポスト。 Perlのパイプ/ファイルハンドルのコンテンツ本体

私はすでに、コールバックを使用してみました:

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をサポートしていることを知っています

ありますか? httpd投稿要求にstdoutをリダイレクトする他の方法はありますか?

+0

エラー500は、あなたが投稿したURLが機能しなかったことを意味します。ウェブサーバーのログにはどのようなエラーがありますか? –

+0

私はサーバーログを持っていません。 – Bobby

答えて

0

私はソケットを作成し、手動でデータを書き込むことにしました。正常に動作します。

関連する問題