私のアプリケーションでは、任意のURLのベースURLを取得する必要があります。今まで私はそのようにそれを得てきました:
$resp->base;
オブジェクトはどこ$resp
にありますかHTTP::Response
。ただし、実際にURLを要求してオブジェクトを取り戻すことなく、URLのベースを知る必要があります。HTTP::Response
誰かがこれを行う方法を知っていますか?
私のアプリケーションでは、任意のURLのベースURLを取得する必要があります。今まで私はそのようにそれを得てきました:
$resp->base;
オブジェクトはどこ$resp
にありますかHTTP::Response
。ただし、実際にURLを要求してオブジェクトを取り戻すことなく、URLのベースを知る必要があります。HTTP::Response
誰かがこれを行う方法を知っていますか?
あなたはあなたが持っているURLに対して""が展開する絶対URLを見つけたいと思って.
います。URIはそれを行うことができます。
$ perl -MURI -E'say URI->new_abs(".", $_) for @ARGV' \
'http://www.example.org/dir/' \
'http://www.example.org/dir/file.html' \
'http://www.example.org/dir/file.cgi?foo=bar'
http://www.example.org/dir/
http://www.example.org/dir/
http://www.example.org/dir/
メソッドによって返される値はHTTP::Response->base
、メッセージのコンテンツに表示される相対URLを解決する方法を指定するHTTP応答メッセージから取得されたURLです。メッセージでそのような値が指定されていない場合は、代わりにメッセージの要求に使用されたURLが使用されます。
応答に反対の情報がないと仮定して取得されるURLが必要なHTTP::Response
場合は、URLをそのまま使用します。ベースURLとしては正常に機能します。
任意のURLの単一のベースはありません。ベースURLは、相対URLを解決するために使用される絶対URLであり、任意の数のパスステップを持つことができます。
例えば、
http://news.bbc.co.uk/1/hi/programmes/click_online/9735140.stm
次のように表すことができます
9735140.stm
ベースURLを基準に
http://news.bbc.co.uk/1/hi/programmes/click_online/
またはとして
1/hi/programmes/click_online/9735140.stm
ベースURLを基準に
http://news.bbc.co.uk/
または、もちろん、パスは任意の時点でベースURLと相対URLの間で分割できます。
値を何に使用したいかは言いません。選択したソリューションは、パスの最後の要素(スラッシュが後に続かないURLのコンポーネント)を削除するだけなので、URLの場合は
http://news.bbc.co.uk/1/hi/programmes/click_online
戻ります
http://news.bbc.co.uk/1/hi/programmes/
しかしのために
http://news.bbc.co.uk/1/hi/programmes/click_online/
同じ値を返します
http://news.bbc.co.uk/1/hi/programmes/click_online/
それがあなたの望む振る舞いであるなら、すべてがうまくいきますが、私はそれを「ベースURLを取得する」とは言いません。