Как я могу извлечь только схему, хост и порт из URL в Perl? - PullRequest
3 голосов
/ 25 февраля 2010

Мне нужно иметь возможность извлекать только схему, хост и порт из URL.

Так что, если мой URL в браузере: http://www.example.com:80/something.pl Мне нужно, чтобы я мог получить: http://www.example.com:80

Ответы [ 4 ]

9 голосов
/ 25 февраля 2010

Модуль URI может помочь вам нарезать и вырезать URI любым удобным для вас способом.

Если вы пытаетесь сделать это из скрипта CGI, вам нужно взглянуть на $ENV{SERVER_NAME} и $ENV{SERVER_PORT}.

Использование метода url используемого вами модуля CGI (например, CGI.pm или CGI :: Simple ) сделает все более простым.

6 голосов
/ 26 февраля 2010

Я позволил модулю URI выяснить это, поэтому мне не нужно создавать новые ошибки:

use 5.010;
use URI;

my $url = 'http://www.example.com:80/something.pl';

my $uri = URI->new( $url );

say $uri->scheme;
say $uri->host;
say $uri->port;
3 голосов
/ 25 февраля 2010

С modperl он находится в объекте Apache2 :: RequestRec , используя либо uri, либо unparsed_uri.

Вы не можете получить точный текст, набранный в браузере пользователя из этого, только то, что представлено на сервер.

Имя сервера (виртуальный хост) находится в объекте Server.

0 голосов
/ 25 февраля 2010
sub cgi_hostname {
  my $h = $ENV{HTTP_HOST} || $ENV{SERVER_NAME} || 'localhost';
  my $dp =$ENV{HTTPS} ? 443 : 80;
  my $ds =$ENV{HTTPS} ? "s" : "";
  my $p = $ENV{SERVER_PORT} || $dp;
  $h .= ":$p" if ($h !~ /:\d+$/ && $p != $dp);
  return "http$ds\://$h";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...