2014-12-13 20 views
1
#!/usr/bin/perl -w 

use strict; 

use FileHandle; 
use LWP::UserAgent; 
use HTTP::Request; 

sub printFile($) { 

    my $fileHandle = $_[0]; 

    while (<$fileHandle>) { 
    my $line = $_; 
    chomp($line); 
    print "$line\n"; 
    } 
} 

my $message = new FileHandle; 

open $message, '<', 'Request.xml' or die "Could not open file\n"; 
printFile($message); 

my $url = qq{https://host:8444}; 

my $ua = new LWP::UserAgent(ssl_opts => { verify_hostname => 0 }); 

$ua->proxy('http', 'proxy:8080'); 
$ua->no_proxy('localhost'); 

my $req = new HTTP::Request(POST => $url); 
$req->header('Host' => "host:8444"); 
$req->content_type("application/xml; charset=utf-8"); 
$req->content($message); 
$req->authorization_basic('TransportUser', 'TransportUser'); 

my $response = $ua->request($req); 
my $content = $response->decoded_content(); 
print $content; 

Я получаю следующее сообщение об ошибке.Отправить HTTP-запрос POST с использованием LWP :: UserAgent, дающий содержимое файла XML как тело

Я хочу отправить запрос на отправку с использованием LWP::UserAgent, и я хочу указать местоположение XML-файла в качестве тела. Я получаю неверную ошибку тела запроса. Тело запроса является недействительным

+0

пожалуйста, напишите текст вашей программы вместо изображения так, чтобы мы может скопировать/вставить его. Вам было сказано об этом ранее в вашем [предыдущем вопросе] (http://stackoverflow.com/questions/27456928) – Borodin

+0

ОК теперь, пожалуйста, проверьте. вместо передачи файла, если я передаю контент, тогда он работает. Но я хочу передать xml-файл –

ответ

1

Я не понимаю, что printFile это, но вы передаете дескриптор файла$message как тело сообщения, а не содержимое файла.

Пожалуйста, обратите внимание на следующее

  • Всегдаuse warnings вместо строки вариант -w комментарий

  • Никогда использование подпрограмм прототипов. sub printFile($) должен быть только sub printFile

  • Там нет необходимости use FileHandle для работы с файлами

  • причиной для файла open отказов в $!. Вы должны всегда включить его в die строке

  • Никогда не используйте косвенный объект обозначения. new LWP::UserAgent должен быть LWP::UserAgent->new

Эта версия кода может работать немного лучше, но у меня нет никакого способа тестирования

#!/usr/bin/perl 

use strict; 
use warnings; 

use LWP; 

my $message = do { 
    open my $fh, '<', 'Request.xml' or die "Could not open file: $!"; 
    local $/; 
    <$fh>; 
}; 

my $url = 'https://host:8444'; 

my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 }); 

$ua->proxy(qw/ http proxy:8080 /); 
$ua->no_proxy('localhost'); 

my $req = HTTP::Request->new(POST => $url); 
$req->header(Host => 'host:8444'); 
$req->content_type('application/xml; charset=utf-8'); 
$req->content($message); 
$req->authorization_basic('TransportUser', 'TransportUser'); 

my $response = $ua->request($req); 
my $content = $response->decoded_content; 
print $content; 
+0

благодаря borodin. Работает ..!! –

 Смежные вопросы

  • Нет связанных вопросов^_^