Webエンジニアの開発記

Webエンジニアの開発記録です。Java,SAStruts,jQuery,AmazonWebService,マッシュアップ。

期限切れドメインの取得可否って何でチェックできるのかな?

URLにリクエストを送って、

HTTPステータス・コードで判別するんじゃないのかな~?

 

HTTPステータス・コードを取得しWebページの存在を確認するには?[C#、VB] − @IT

 

まずは実際に期限切れドメインを見つけて、

それにリクエスト送ってみて、

どんなレスポンスが返ってくるか調査だね。

 

調査1 ヤフー

ヤフーにリクエスト送ったら何が返ってくるか。

[HTTP/1.1 200 OK, nginx, Sat, 10 Jan 2015 14:54:59 GMT, text/html; charset=UTF-8, chunked, close, policyref="http://privacy.yahoo.co.jp/w3c/p3p_jp.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV", private, no-cache, no-store, must-revalidate, -1, no-cache, https://open.login.yahooapis.jp/openid20/www.yahoo.co.jp/xrds, Accept-Encoding, SAMEORIGIN, null, null, null]

 

 

調査2 適当文字列ドメイン

適当文字列ドメインは取得可能なはず。

それが返ってくるのが取得可能なドメインステータスコードだよね。

 

とりあえず「http://aoerignalekjlnkjvas.com」としてみた。

しばらく応答がありませんね。

 

ってことは、ステータスは返ってこないですね。

返ってくるわけないねんから。

それをこっちが勝手になんかに変換してんのかもね。

 

そしてなんと、

「理由はjava.net.UnknownHostException: aoerignalekjlnkjvas.com」

ということでExceptionが投げられてしまった。

 

Exception投げる前に、応答期限となる時間を設定せなあかんのやろな。

3秒すぎたらHOSTなしと判定せよ的な。

 

今、リクエストにはHttpURLConnectionクラスを使っている。

HttpURLConnection (Java Platform SE 6)

見つけた。

多分これ「setConnectTimeout」メソッド

クラス java.net.URLConnection から継承されたメソッドらしい。

 

connection.setConnectTimeout(3000);

としてやってみよう。

 

結果。

設定したはいいけど、3000ミリ秒(3秒)超えると、

同じUnknownHostExceptionを投げるようだ。

 

キャッチしたらなあかんの?

APIには接続が確立される前にタイムアウトが過ぎた場合は、java.net.SocketTimeoutException が発行されます。

って書いてるけど。

 

よくみたら、

requestUrl.openConnection()

↑この結果が既にnullになっている。

こいつからステータスを取り出せないものか?

 

でも逆にUnknownHostExceptionが投げられた=取得可能ドメイン

ってことになるよね。

ホストの IP アドレスが判定できなかった場合にスローされます。

なるほど。

 

IP アドレスに変換する前にNGになってるパターンなんや。

これも取得可能ドメインの1つのパターンだよね。

 

でも中古ドメインなんかは、

IP アドレスに変換した後でNGになるんちゃうかな。

そっちのパターンも調べたいね。

 

※ちょっと役立ちそうな記事発見。

Android の java.net.HttpURLConnection - たていすのメモ