2

私のアプリケーションでは、任意のURLのベースURLを取得する必要があります。今まで私はそのようにそれを得てきました:

$resp->base;

オブジェクトはどこ$respにありますかHTTP::Response。ただし、実際にURLを要求してオブジェクトを取り戻すことなく、URLのベースを知る必要があります。HTTP::Response誰かがこれを行う方法を知っていますか?

4

2 に答える 2

3

あなたはあなたが持っている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/
于 2012-07-09T20:48:05.873 に答える
0

メソッドによって返される値は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を取得する」とは言いません。

于 2012-07-09T22:28:33.657 に答える