2010-02-25 12 views
6

Ich versuche, von einem meiner Subroutinen in Perl eine Anfrage an einen Java-basierten Controller zu senden. Aber ich bekomme keine Antwort zurück. Ich kenne die Java-Code-Arbeitsdatei, weil ich eine Antwort erhalten kann, wenn ich von einem HTML-Formular aus darauf poste.Wie kann ich eine mehrteilige HTTP-Anfrage von Perl an Java senden und eine Antwort erhalten?

Das ist mein Perl-Code:

use HTTP::Request::Common; 
    my $ua = LWP::UserAgent->new; 

    my $response = $ua->request(POST 'http://testserver/testing.nc', 
     Content_Type => 'form-data', 
     Content => [ 
      method => 'submit', 
      ftp_server => 'ftp.localhost', 
      ftp_user => 'testuser', 
      ftp_password => 'testpass', 
      remote_path => '/home/files', 
      port => 22, 
      file_to_upload => ["$file"] 
    ]); 

Gibt es etwas falsch mit diesem Code?

+0

Warum gibt es Zeilen für ftp_server? Verwenden Sie http oder ftp? Wenn Sie beabsichtigen, eine Datei auf einer FTP-Site an einen Webserver zu senden, müssen Sie das nicht in zwei Schritten tun? Ich bin verwirrt. – Paul

+0

Meine Vermutung ist das 'testing.nc' Skript soll die Datei auf die FTP-Site übertragen. –

+0

Vielleicht. Wenn er eine Datei hochladen möchte und er Zugang zu einem FTP-Server hat und den Benutzer/Passwort des FTP-Servers kennt, könnte er ein Perl-Modul verwenden, um diese Übertragung direkt durchzuführen, wenn er es wollte und/oder der Arbeitgeber es erlaubt. Goe - weißt du, was dieser Code oder dieses Skript tun soll, wenn es richtig funktioniert? – Paul

Antwort

6

Veröffentlichte Daten must be of type multipart/form-data.

Edit: OK, es stellt sich heraus, form-data Angabe genügt, wie sie in den HTTP::Request::Common docs erwähnt:

Die POST-Methode unterstützt auch die multipart/form-data Inhalte für formularbasierte Datei-Upload verwendet, wie angegeben in RFC 1867. Sie lösen dieses Inhaltsformat aus, indem Sie als einen der Anforderungsheader den Inhaltstyp form-data angeben.

jedoch HTTP::Request::Common::POST die Art und Weise zu verwenden, die Sie verwenden, müssen Sie POST importieren:

use HTTP::Request::Common qw(POST); 

oder verwenden $ua->post:

Die post(...) Methode von LWP::UserAgent als Verknüpfung existiert für $ua->request(POST ...).

Sie können Ihr Leben einfacher machen, indem Sie WWW::Mechanize verwenden. Siehe auch this upload example.

+0

Was meinst du genau? Ich definiere den Content_Type asd 'Form-Daten' in Zeile 5 – goe

+0

"Form-Daten"! = "Multipart/Form-Daten" – Quentin

+0

Nun, ich nahm dieses Beispiel aus: "http://kobesearch.cpan.org/htdocs/ libwww-perl/HTTP/Request/Common.pm.html # POST_url_Header_gt_Value_Content_gt_ "und sie verwenden" form-data "plus da kein Komma zwischen POST und der tatsächlichen URL – goe