Как я могу изменить имя хоста в URL с помощью Perl? - PullRequest
0 голосов
/ 17 сентября 2009

У меня есть несколько URL-адресов, таких как http://anytext.a.abs.com

В них anytext - это данные, которые являются динамическими. Остальная часть URL останется неизменной в любом случае.

Я использую следующий код:

$url = "http://anytext.a.abs.com";


    my $request = new HTTP::Request 'GET', $url;
    my $response = $ua->request($request);
    if ($response->is_success)
    {
        function......;
    }

Теперь, как я могу разобрать URL, в котором есть динамические данные?

Ответы [ 4 ]

3 голосов
/ 17 сентября 2009

Не уверен, но близко ли это к тому, что вы ищете?:

for my $host qw(anytext someothertext andanother) {
    my $url      = "http://$host.a.abs.com";
    my $request  = new HTTP::Request 'GET', $url;
    my $response = $ua->request($request);
    if ($response->is_success)
    {
        function......;
    }
}
1 голос
/ 17 сентября 2009

Думаю, этого вполне достаточно:

# The regex specifies a string preceded by two slashes and all non-dots
my ( $host_name ) = $url =~ m{//([^.]+)}; 

И если вы хотите изменить его:

$url =~ s|^http://\K([^.]+)|$host_name_I_want|;

Или даже:

substr( $url, index( $url, $host_name ), length( $host_name ), $host_name_I_want );

Это достаточно расширит сегмент для размещения $host_name_I_want.

1 голос
/ 17 сентября 2009

Что-то вроде этого может быть?

В противном случае вы можете использовать класс URI для манипулирования URL.

my $protocol = 'http://'
my $url_end = '.a.abs.com';

    $url = $protocol . "anytext" . $url_end;
    my $request = new HTTP::Request 'GET', $url;
    my $response = $ua->request($request);
    if ($response->is_success)
    {
        function......;
    }
0 голосов
/ 17 сентября 2009

Ну, как бы вы анализировали любые другие данные: используйте имеющуюся у вас информацию о структуре. У вас есть часть протокола, за которой следует «слеш двоеточия», затем хост, за которым следует необязательный «номер порта двоеточия» и необязательный путь к хосту. Итак ... создайте небольшой анализатор, который извлекает информацию, которую вы ищете.

И, честно говоря, если вы ищете только «что здесь такое« anytext »?», RegEx этой формы должен помочь (не проверено; использовать в качестве руководства):

$url =~ m/http\:\/\/(.*).a.abs.com/;
$subdomain = $1;

$do_something('with', $subdomain);

Извините, если я неправильно понял проблему под рукой. Пожалуйста, объясните, что вы имеете в виду под "как я могу проанализировать URL, содержащий динамические данные?" в таком случае:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...