2010-02-25 15 views
6

Próbuję wysłać z jednego z moich podprogramów w Perlu żądanie do kontrolera Java. Ale nie otrzymuję żadnej odpowiedzi. Znam plik działający w kodzie Java, ponieważ mogę uzyskać odpowiedź, jeśli opublikuję go w formularzu HTML.Jak mogę POST wieloczęściowego żądania HTTP z Perl do Java i uzyskać odpowiedź?

To jest mój kod Perl:

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

Czy jest coś nie tak z tym kodem?

+0

Dlaczego istnieją linie dla ftp_server? Używasz http lub ftp? Jeśli zamierzasz opublikować plik znajdujący się na serwerze ftp na serwerze WWW, czy nie trzeba tego robić w dwóch krokach? Jestem zmieszany. – Paul

+0

Domyślam się, że skrypt 'testing.nc' ma przesłać plik do witryny FTP. –

+0

Może. Jeśli chce przesłać plik i ma dostęp do serwera ftp i zna użytkownika/hasło serwera ftp, mógłby użyć modułu perl, aby dokonać tego bezpośrednio, jeśli chciał i/lub na to zezwolił pracodawca. Goe - czy wiesz, co ten kod lub skrypt powinien zrobić, gdy działa poprawnie? – Paul

Odpowiedz

6

Opublikowane dane must be of type multipart/form-data.

Edit: OK, więc okazuje się, określając form-data wystarczy jak wspomniano w HTTP::Request::Common docs:

Metoda POST obsługuje również zawartość multipart/form-data używany opartego na formularzu Upload pliku, jak określono w RFC 1867. Wyzwalasz ten format zawartości, określając typ zawartości form-data jako jeden z nagłówków żądań.

Jednak, aby korzystać HTTP::Request::Common::POST drogę używasz, trzeba będzie importować POST:

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

lub użyj $ua->post:

post(...) metoda LWP::UserAgent występuje jako skrót dla $ua->request(POST ...).

Możesz ułatwić sobie życie, używając WWW::Mechanize. Zobacz także this upload example.

+0

Co dokładnie masz na myśli? Definiuję Content_Type asd 'form-data' w wierszu 5 – goe

+0

"form-data"! = "Multipart/form-data" – Quentin

+0

Cóż, wziąłem ten przykład z: "http://kobesearch.cpan.org/htdocs/ libwww-perl/HTTP/Request/Common.pm.html # POST_url_Header_gt_Value_Content_gt_ "i używają" danych formularzy "oraz" bez przecinków między POST a rzeczywistym adresem URL – goe

Powiązane problemy