2009-09-17 2 views
0

У меня есть некоторые URL-адреса, например http://anytext.a.abs.comКак изменить имя хоста в URL-адресе с помощью Perl?

В них «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, который имеет динамические данные в нем?

ответ

3

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

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

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

В противном случае вы можете использовать класс 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

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

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

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

$do_something('with', $subdomain); 

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

1

Я думаю, что это, вероятно, достаточно:

# 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.

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