我需要能夠從URL中提取方案,主機和端口。如何從Perl中的URL中提取方案,主機和端口?
所以,如果我在瀏覽器網址是:http://www.example.com:80/something.pl
我需要能夠獲得:http://www.example.com:80
我需要能夠從URL中提取方案,主機和端口。如何從Perl中的URL中提取方案,主機和端口?
所以,如果我在瀏覽器網址是:http://www.example.com:80/something.pl
我需要能夠獲得:http://www.example.com:80
的URI模塊可以幫助您切片和切塊一個URI任何你想要哪種方式。
如果您嘗試在CGI腳本中執行此操作,您需要查看$ENV{SERVER_NAME}
和$ENV{SERVER_PORT}
。
使用正在使用的CGI模塊(例如CGI.pm或CGI::Simple)的url
方法使事情更加簡單。
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";
}
隨着modperl,它在Apache2::RequestRec對象,即使用uri
,或unparsed_uri
。
您無法從中獲取輸入到用戶瀏覽器中的確切文本,只能獲取呈現給服務器的內容。
服務器名稱(虛擬主機)位於服務器對象中。
我讓URI模塊數字出來,所以我沒有創建新的bug:
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;
@goe看來你選擇了這個答案,因爲你不想使用'CGI.pm'或'CGI :: Simple'。我不關心你選擇了哪個答案,但是從長遠來看,沒有爲你的CGI腳本使用一個完善的模塊會花費你的成本。 – 2010-02-25 21:09:19