2009-09-17 6 views
0

J'ai quelques URL comme http://anytext.a.abs.comComment puis-je changer le nom d'hôte dans une URL en utilisant Perl?

Dans ceux-ci, «anytext» est la donnée qui est dynamique. Le reste de l'URL restera le même dans tous les cas.

J'utilise le code suivant:

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


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

Maintenant, comment puis-je analyser une URL qui contient des données dynamiques en elle?

Répondre

3

Je ne sais pas mais est-ce à ce que vous êtes après ?:

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

Quelque chose comme ça peut-être?

Sinon, vous pouvez utiliser la classe URI pour effectuer une manipulation d'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

Eh bien, comme si vous analysiez d'autres données: Utilisez les informations dont vous disposez sur la structure. Vous avez une partie de protocole, suivie par "barre oblique du côlon", puis l'hôte suivi par un "numéro de port du colon" facultatif et un chemin facultatif sur l'hôte. Alors ... construis un petit analyseur qui extrait les informations que vous recherchez.

Et franchement, si vous cherchez seulement pour « ce qui est pétantes 'anytext ici? », Une expression régulière de cette forme devrait aider (non testé, utiliser comme guide):

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

$do_something('with', $subdomain); 

Désolé si je grossièrement mal compris le problème à portée de main. Veuillez expliquer ce que vous entendez par "comment puis-je analyser une URL contenant des données dynamiques?" dans ce cas :)

1

Je pense que cela est probablement assez:

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

Et si vous voulez changer:

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

Ou encore:

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

Cela étendre le segment suffisamment pour accueillir $host_name_I_want.

Questions connexes