Java文字列が「youtube.com」と「goo.gl/ur2l」を想定しているので2つのURLがあり、関数を作成したい
boolean isSame(String url1, String url2)
これは、両方のURLが最後に同じURLに直接つながるかどうかに関係なく天気を返します。それはJavaでどのように実装されますか?
Java文字列が「youtube.com」と「goo.gl/ur2l」を想定しているので2つのURLがあり、関数を作成したい
boolean isSame(String url1, String url2)
これは、両方のURLが最後に同じURLに直接つながるかどうかに関係なく天気を返します。それはJavaでどのように実装されますか?
各 URL に対して HTTP 要求を実行し、HTTP コードを確認します。リダイレクト ( 30*
) の場合は、HTTP ヘッダーを抽出しLocation
ます。これが「元の」URL である必要があります。
文字列を IP アドレスに変換して比較する必要があります。そんな感じ:
InetAddress address = null;
byte[] ip = new byte[0];
try {
address = InetAddress.getByName("google.com");
ip = address.getAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
http://www.youtube.comのURL をhttp://bit.ly/9b2Y3Dに短縮しました。curlを使用して後者にアクセスすると、次のようになります。
$ curl http://bit.ly/9b2Y3D
[...]
> GET /9b2Y3D HTTP/1.1
[...]
< HTTP/1.1 301 Moved
[...]
< Location: http://youtube.com/
ご覧のとおり、短縮された URL は 200 OK ではなく 302 を返します。また、Location
ヘッダーは非常に興味深いものです。初心者向けの情報がたくさんあると思います。HttpClient を試して、ステータス コードとLocation
. 次に、URL
class,e を特にどのように実装するかを見てくださいequals()
。
200 の http コードが見つかるまで、302 リダイレクトをたどる必要があります。無限のリダイレクトに従わないように設定してください:)