2010-02-25 20 views
6

Estoy tratando de publicar desde una de mis subrutinas en Perl una solicitud a un controlador basado en Java. Pero no recibo ningún tipo de respuesta. Sé que el código de Java funciona archivo porque puedo obtener una respuesta si lo publico desde un formulario HTML.¿Cómo puedo ENVIAR una solicitud HTTP multiparte de Perl a Java y obtener una respuesta?

Este es mi código 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"] 
    ]); 

¿Hay algo malo con este código?

+0

¿Por qué hay líneas para ftp_server? ¿Estás usando http o ftp? Si tiene la intención de publicar un archivo que está en un sitio ftp en un servidor web, ¿no necesita hacerlo en dos pasos? Estoy confundido. – Paul

+0

Supongo que el script 'testing.nc' se supone que transfiere el archivo al sitio FTP. –

+0

Quizás. Si quiere subir un archivo y tiene acceso a un servidor ftp, y conoce el usuario/contraseña del servidor ftp, podría usar un módulo perl para hacer esa transferencia directamente si quisiera y/o el empleador lo permite. Goe: ¿sabes lo que se supone que debe hacer este código o script cuando funciona correctamente? – Paul

Respuesta

6

Datos publicados must be of type multipart/form-data.

Editar: OK, por lo que resulta, especificando form-data es suficiente como se menciona en los HTTP::Request::Common docs:

El método POST también es compatible con el contenido multipart/form-data utilizado para Form-based carga de archivos como se especifica en RFC 1867. Activa este formato de contenido especificando un tipo de contenido de form-data como uno de los encabezados de solicitud.

Sin embargo, para utilizar HTTP::Request::Common::POST la forma en que está utilizando, tendrá que importar POST:

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

o utilizar $ua->post:

El método de LWP::UserAgentpost(...) existe como un atajo para $ua->request(POST ...).

Puede hacer su vida más fácil usando WWW::Mechanize. Vea también this upload example.

+0

¿Qué quieres decir exactamente? Defino Content_Type asd 'form-data' en la línea 5 – goe

+0

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

+0

Bien, tomé este ejemplo de: "http://kobesearch.cpan.org/htdocs/ libwww-perl/HTTP/Request/Common.pm.html # POST_url_Header_gt_Value_Content_gt_ "y usan" form-data "además de que" no hay una coma entre POST y la URL real – goe

Cuestiones relacionadas