2009-09-17 55 views
0

我有一些網址,如http://anytext.a.abs.com如何使用Perl更改URL中的主機名?

在這些'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......; 
    } 

現在,我怎麼能解析它具有動態數據的網址?

回答

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類來進行網址操作。

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); 

很抱歉,如果我嚴重誤解了手頭的問題。請解釋你的意思是'我如何解析一個包含動態數據的網址?'在這種情況下:)

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