2010-02-25 9 views
6

Sto provando a pubblicare da una delle mie subroutine in Perl una richiesta a un controller basato su Java. Ma non ricevo nessun tipo di risposta. Conosco il file di codice Java funziona perché posso ottenere una risposta se pubblico da un modulo HTML.Come posso POST una richiesta HTTP con più parti da Perl a Java e ottenere una risposta?

Questo è il mio codice 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"] 
    ]); 

C'è qualcosa di sbagliato in questo codice?

+0

Perché ci sono linee per ftp_server? Stai usando http o ftp? Se intendi pubblicare un file che si trova su un sito ftp su un server web, non è necessario farlo in due passaggi? Non ho capito bene. – Paul

+0

La mia ipotesi è che lo script 'testing.nc' dovrebbe trasferire il file sul sito FTP. –

+0

Forse. Se vuole caricare un file e ha accesso a un server ftp, e conosce l'utente/password del server ftp, potrebbe utilizzare un modulo perl per effettuare il trasferimento direttamente se lo desidera e/o il datore di lavoro lo consente. Goe - sai cosa dovrebbe fare questo codice o script quando funziona correttamente? – Paul

risposta

6

Dati inviati must be of type multipart/form-data.

Edit: OK, così si scopre, specificando form-data è sufficiente, come indicato nelle HTTP::Request::Common documentazione:

Il metodo POST supporta anche il contenuto multipart/form-data utilizzato per Form-based File Upload come specificato nella RFC 1867. Attivare questo formato di contenuto specificando un tipo di contenuto di form-data come una delle intestazioni di richiesta.

Tuttavia, per utilizzare HTTP::Request::Common::POST il modo in cui si sta utilizzando, è necessario importare POST:

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

o utilizzare $ua->post:

Il metodo di LWP::UserAgentpost(...) esiste come una scorciatoia per $ua->request(POST ...).

È possibile semplificare la vita utilizzando WWW::Mechanize. Vedi anche this upload example.

+0

Cosa intendi esattamente? Definisco il Content_Type asd 'form-data' alla riga 5 – goe

+0

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

+0

Bene, ho preso questo esempio da: "http://kobesearch.cpan.org/htdocs/ libwww-perl/HTTP/Request/Common.pm.html # POST_url_Header_gt_Value_Content_gt_ "e usano" form-data "più là 'nessuna virgola tra POST e l'URL attuale – goe

Problemi correlati