如何使用Perl更改URL中的主机名?

时间:2009-09-17 11:47:54

标签: perl 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......;
    }

现在,我如何解析其中包含动态数据的网址?

4 个答案:

答案 0 :(得分: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 :(得分: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......;
    }

答案 2 :(得分: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

答案 3 :(得分:0)

好吧,就像您要解析任何其他数据一样:使用有关结构的信息。 您有一个协议部分,后跟“冒号斜杠”,然后是主机,后跟可选的“冒号端口号”和主机上的可选路径。 所以...构建一个解析你所追求的信息的小解析器。

坦率地说,如果你只是在寻找“这里有什么样的'任何文字'?”,这个表格的RegEx应该有帮助(未经测试;用作指导):

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

$do_something('with', $subdomain);

很抱歉,如果我严重误解了手头的问题。请解释一下“我如何解析其中包含动态数据的网址”的含义?在那种情况下:)