Я пытаюсь отправить от одной из моих подпрограмм в Perl запрос к основанному на Java контроллеру. Но я не возвращаю вида ответа. Я знаю файл работ кода Java, потому что я могу получить ответ, если я отправляю на него от HTML-формы.
Это - мой код 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"]
]);
Есть ли что-то не так с этим кодом?
Размещенные данные должны быть типа multipart/form-data
.
Edit: ОК, оказывается, достаточно указать form-data
, как сказано в HTTP::Request::Common docs:
Метод POST также поддерживает
multipart/form-data
содержимое, используемое для загрузки файлов на основе формы, как указано в RFC 1867. Вы вызываете этот формат содержимого, указывая тип содержимогоform-data
в одном из заголовков запроса.
Однако, чтобы использовать HTTP::Request::Common::POST
так, как вы используете, вам нужно импортировать POST
:
use HTTP::Request::Common qw(POST);
или использовать $ua->post
:
В
post(. ...)
метод LWP::UserAgent существует как сокращение для$ua->request(POST ...)
.
Вы можете облегчить себе жизнь, используя WWW::Mechanize. См. также этот пример загрузки.