如何从Perl中的URL中提取方案,主机和端口?

时间:2010-02-25 20:11:21

标签: perl url

我需要能够从URL中提取方案,主机和端口。

因此,如果浏览器中的我的网址是:http://www.example.com:80/something.pl 我需要能够获得:http://www.example.com:80

4 个答案:

答案 0 :(得分:9)

URI模块可以帮助您以任何方式切片和切块URI。

如果您尝试在CGI脚本中执行此操作,则需要查看$ENV{SERVER_NAME}$ENV{SERVER_PORT}

使用您正在使用的CGI模块的url方法(例如CGI.pmCGI::Simple)会使事情变得更加直截了当。

答案 1 :(得分:6)

我让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;

答案 2 :(得分:3)

使用modperl,它位于Apache2::RequestRec对象中,使用uriunparsed_uri

您无法从此处获取输入用户浏览器的确切文本,只能将其显示给服务器。

服务器名称(虚拟主机)位于Server对象中。

答案 3 :(得分:-5)

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";
}