2017-08-16 1 views
2

Ich habe ein Werkzeug, das einige Daten generiert und druckt es auf stdout. In meinem Perl-Skript muss ich dieses Tool starten und die produzierten Daten per Post-Anfrage an einen http-Server senden. Das Tool generiert eine Menge Daten und es kann sehr zeitaufwändig sein, es auf der Festplatte zu speichern und nur dann zu senden. Also ich möchte es wirklich im laufenden Betrieb senden, sagen wir, dass wir das stdout zur HTTP-Post-Anfrage umleiten. Content-Length sollte keine große Sache sein, weil ich die Datengröße kenne.HTTP-Post. Inhalt Körper aus Pipe/Datei-Handle in Perl

Ich habe bereits versucht Rückrufe zu verwenden:

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); 

und von einem fh Lesen:

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); 

Aber aus irgendeinem Grunde für mich ist es nicht funktioniert und ich erhalte Fehler 500 Auch Ich weiß sicher, dass der Server multipart/Formulardaten unterstützt

Gibt es ein Beispiel? Gibt es eine andere Möglichkeit, stdout auf meine HTTP-Post-Anfrage umzuleiten?

+0

Fehler 500 bedeutet, dass die URL, an die Sie senden, nicht funktioniert hat - welche Fehler gibt es in den Webserverprotokollen? –

+0

Ich habe keine Serverprotokolle. – Bobby

Antwort

0

Danke an alle, ich beschloss, einen Socket zu erstellen und die Daten manuell zu schreiben. Funktioniert gut.

Verwandte Themen