我需要能够从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