Perl-код для вызова переменных hostname, portnumber в другую переменную

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use XML::Twig;
use HTTP::Request;

my @joblist = ('Testing','Integrity','TEST','Team_test','test','TEST_1','Update_Outlook');
my @score;

foreach my $job_name (@joblist) {
    my $url_a = 'http://myhost:8080/job/$job_name/api/xml';
    my $ua = LWP::UserAgent->new;
    $ua->timeout(10);
    $ua->env_proxy;
    my $response = $ua->get($url_a);
    if ($response->is_success) {
        my $content = $response->decoded_content;  # or whatever
        XML::Twig->new( twig_roots => { 'healthReport/score' => sub { push @score, $_->text; } }) ->parseurl($url_a);
        foreach my $var (@score) {
            print "$var \n";
        }
    }
    else {
        die $response->status_line;
    }
}

В вышеперечисленном Perl-коде я вызываю $ job_name в другую переменную $ url_a. Но я получаю следующую ошибку.

404 Not Found at health.pl line 25.

Может кто-то, пожалуйста, помогите мне в этом. Спасибо.

1
добавлено отредактировано
Просмотры: 1
de
@ F.Hauri является правильным. Ваш код тоже работает для меня. Пожалуйста, отредактируйте свой вопрос и добавьте строки, которые появляются после него. Используете ли вы strict и предупреждения ?
добавлено автор simbabque, источник
Эта часть кажется мне прекрасной. Таким образом, существует две возможности: .1 ошибка расположена в некоторых следующих строках (вы можете печатать больше строк в своем вопросе SO) .2 Ваша установка perl не выполнена хорошо или неправильно.
добавлено автор F. Hauri, источник
Хммм вопрос изменился: 404 Not Found означает: По крайней мере, на построенном url не существует : Вы уверены, что http://myhost: 8080/job/Integrity/api/xml (для образца) является допустимым URL?
добавлено автор F. Hauri, источник
Просто попробуйте изменить die $ response-> status_line; на printf STDERR "ERROR:% s \ n", $ response-> status_line; в строке 25.
добавлено автор F. Hauri, источник
Хорошо, я нашел вашу проблему: по строке 15: $ url_a = ... изменить кавычки ' двойными кавычками "!
добавлено автор F. Hauri, источник
Я разместил это как ответ, чтобы вы могли проверить их, если они работают ;-)
добавлено автор F. Hauri, источник
Я переписал строку 15 более красиво, (используя join ), посмотрите!
добавлено автор F. Hauri, источник
Спасибо @ F.Hauri ,. Я обновил вопрос с полным кодом.
добавлено автор MangeshBiradar, источник
Да URL-адрес Ссылка верна. На самом деле ошибка может быть здесь: my $ url_a = ' myhost: 8080/job/$ job_name/API/XML & # 39 ;; $ job_name не подставляет его значение в $ url_a.
добавлено автор MangeshBiradar, источник
идеально...!! :-) Спасибо @ F.Hauri это сработало ..
добавлено автор MangeshBiradar, источник

1 ответы

Попробуйте эту версию:

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use XML::Twig;
use HTTP::Request;

my @joblist = qw|Testing Integrity TEST Team_test test TEST_1 Update_Outlook|;
my @score;

foreach my $job_name (@joblist) {
    my $url_a = join("/","http://myhost:8080/job",$job_name,"api/xml");
    my $ua = LWP::UserAgent->new;
    $ua->timeout(10);
    $ua->env_proxy;
    my $response = $ua->get($url_a);
    if ($response->is_success) {
        my $content = $response->decoded_content;  # or whatever
        XML::Twig->new( twig_roots => { 'healthReport/score' => sub { push @score, $_->text; } }) ->parseurl($url_a);
        foreach my $var (@score) {
            print "$var \n";
        }
    }
    else {
        printf STDERR "ERROR job: %s, result: %s\n", 
        $job_name, $response->status_line;
    }
}
1
добавлено
Спасибо @ F.Hauri.
добавлено автор MangeshBiradar, источник