HTTPレスポンスコードを取得する

戻る
■実行結果

*** DEBUG *** in PropertyManager.getInstance() : PropertyManagerがインスタンス化されました!
*** DEBUG *** in PropertyManager.getInstance() : ../../etc/Default.properties の内容を読み取っています
*** DEBUG *** in CookieContainer.getInstance() : CookieContainerがインスタンス化されました!

        /// COOKIE FOUND /// in CookieContainer.dump()
                hostName = www.doblog.com
                URL = http://www.doblog.com/weblog/myblog/14531
                cookieInfo = JSESSIONID=BFCC1D157BF42FF17E0C2A4CA2B9E114.sheep; Path=/weblog


[ 1] Date: Fri, 24 Jun 2005 15:37:52 GMT
[ 2] Server: Apache/2.0.50 (Unix) mod_ssl/2.0.50 OpenSSL/0.9.7a mod_jk2/2.0.3-dev
[ 3] Set-Cookie: JSESSIONID=BFCC1D157BF42FF17E0C2A4CA2B9E114.sheep; Path=/weblog
[ 4] Cache-Control: no-cache
[ 5] Pragma: no-cache
[ 6] Expires: Thu, 01 Jan 1970 00:00:00 GMT
[ 7] Content-Type: text/html;charset=UTF-8
[ 8] Keep-Alive: timeout=5, max=100
[ 9] Connection: Keep-Alive
[10] Transfer-Encoding: chunked


RESPONSE_CODE=200


タイトル = Doblog - オクラを育ててみよう♪ -
(  1) http://asistobe851.hp.infoseek.co.jp/public_tec/
(  2) http://asistobe851.hp.infoseek.co.jp/public_tec/CommandInvocation.html
(  3) http://asistobe851.hp.infoseek.co.jp/public_tec/trackbackpinger.html
(  4) http://bellde.gozaru.jp/siso.htm
(  5) http://blog.goo.ne.jp/pink_momonga/c/9e15ac8103423bc28f28642d54c23084
(  6) http://e-28.jp/incp.asp?viewpage=prod/prod/00079&in_cate_no=15
(  7) http://jibun.atmarkit.co.jp/lskill01/rensai/zukail01/zukail01.html
(  8) http://kgarden.hp.infoseek.co.jp/vegeta/okura.html
(  9) http://ocuden.ddo.jp/green/kanyo/aloe/index.html
( 10) http://shippai.jst.go.jp/fkd/Search
( 11) http://soeweb.syr.edu/Faculty/Spector/personal/gumbo.html
( 12) http://www.aloe-seiyaku.co.jp/aloestory/vol7_2.html
( 13) http://www.blog-headline.jp/food/archives/2005/06/post_61.html
( 14) http://www.coffee-jin.jp/sukusuku/
( 15) http://www.doblog.com/
( 16) http://www.doblog.com/img/u14531/FI1483414_0E.png
( 17) http://www.doblog.com/img/u14531/FI1525569_0E.jpg
( 18) http://www.doblog.com/img/u14531/FI1525569_1E.jpg
( 19) http://www.doblog.com/img/u14531/FI1525569_2E.jpg
( 20) http://www.doblog.com/img/u14531/FI1525609_0E.jpg
( 21) http://www.doblog.com/img/u14531/FI1525630_0E.jpg
( 22) http://www.doblog.com/img/u14531/FI1525661_0E.jpg
( 23) http://www.doblog.com/img/u14531/FI1525661_1E.jpg
( 24) http://www.doblog.com/img/u14531/FI1525661_2E.jpg
( 25) http://www.doblog.com/img/u14531/bgthumb/BTH1483414_0B.png
( 26) http://www.doblog.com/img/u14531/bgthumb/BTH1525569_0B.jpg
( 27) http://www.doblog.com/img/u14531/bgthumb/BTH1525569_1B.jpg
( 28) http://www.doblog.com/img/u14531/bgthumb/BTH1525569_2B.jpg
( 29) http://www.doblog.com/img/u14531/bgthumb/BTH1525609_0B.jpg
( 30) http://www.doblog.com/img/u14531/bgthumb/BTH1525630_0B.jpg
( 31) http://www.doblog.com/img/u14531/bgthumb/BTH1525661_0B.jpg
( 32) http://www.doblog.com/img/u14531/bgthumb/BTH1525661_1B.jpg
( 33) http://www.doblog.com/img/u14531/bgthumb/BTH1525661_2B.jpg
( 34) http://www.doblog.com/weblog/RSSServlet?CMD=LATEST&userid=14531&TYPE=ATOM
( 35) http://www.doblog.com/weblog/RSSServlet?CMD=LATEST&userid=14531&TYPE=RSS_0_91
( 36) http://www.doblog.com/weblog/RSSServlet?CMD=LATEST&userid=14531&TYPE=RSS_1_0
( 37) http://www.doblog.com/weblog/RSSServlet?CMD=LATEST&userid=14531&TYPE=RSS_2_0
( 38) http://www.doblog.com/weblog/jsp/faq.jsp
( 39) http://www.doblog.com/weblog/jsp/guide1_01.jsp
( 40) http://www.doblog.com/weblog/jsp/regist001.jsp
( 41) http://www.doblog.com/weblog/jsp/support.jsp
( 42) http://www.doblog.com/weblog/myblog/
( 43) http://www.doblog.com/weblog/myblog/14531
( 44) http://www.doblog.com/weblog/myblog/14531/1295261
( 45) http://www.doblog.com/weblog/myblog/14531/1301872
( 46) http://www.doblog.com/weblog/myblog/14531/1329343
( 47) http://www.doblog.com/weblog/myblog/14531/1403006
( 48) http://www.doblog.com/weblog/myblog/14531/1474716
( 49) http://www.doblog.com/weblog/myblog/14531/1476865
( 50) http://www.doblog.com/weblog/myblog/14531/1483414
( 51) http://www.doblog.com/weblog/myblog/14531/1497021
( 52) http://www.doblog.com/weblog/myblog/14531/1510556
( 53) http://www.doblog.com/weblog/myblog/14531/1514024
( 54) http://www.doblog.com/weblog/myblog/14531/1514034
( 55) http://www.doblog.com/weblog/myblog/14531/1518301
( 56) http://www.doblog.com/weblog/myblog/14531/1518305
( 57) http://www.doblog.com/weblog/myblog/14531/1522919
( 58) http://www.doblog.com/weblog/myblog/14531/1522926
( 59) http://www.doblog.com/weblog/myblog/14531/1525564
( 60) http://www.doblog.com/weblog/myblog/14531/1525569
( 61) http://www.doblog.com/weblog/myblog/14531/1525609
( 62) http://www.doblog.com/weblog/myblog/14531/1525630
( 63) http://www.doblog.com/weblog/myblog/14531/1525661
( 64) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=100314
( 65) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=103902
( 66) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=104749
( 67) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=104750
( 68) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=26776
( 69) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=26777
( 70) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=32269
( 71) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=33727
( 72) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=35149
( 73) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=35150
( 74) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=44151
( 75) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=45684
( 76) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=65525
( 77) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=82386
( 78) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=88173
( 79) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=89252
( 80) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=94331
( 81) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=95283
( 82) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=95716
( 83) http://www.doblog.com/weblog/myblog/14531?STYPE=1&KEY=97917
( 84) http://www.doblog.com/weblog/myblog/14531?YEAR=2004
( 85) http://www.doblog.com/weblog/myblog/14531?YEAR=2005
( 86) http://www.doblog.com/weblog/myblog/14531?YEAR=2035&MONTH=6
( 87) http://www.doblog.com/weblog/myblog/14531?YEAR=2035&MONTH=6&DAY=14
( 88) http://www.doblog.com/weblog/myblog/14531?pageno=2
( 89) http://www.doblog.com/weblog/myblog/20520
( 90) http://www.doblog.com/weblog/myblog/376
( 91) http://www.doblog.com/weblog/myblog/50904
( 92) http://www.doblog.com/weblog/myblog/7160
( 93) http://www.doblog.com/weblog/myblog/8420
( 94) http://www.google.co.jp/search?sourceid=navclient&ie=UTF-8&rls=GGLD,GGLD:2004-46,GGLD:en&q=%E3%83%8F%E3%82%A4%E3%83%9D%E3%83%8D%E3%83%83%E3%82%AF%E3%82%B9%E3%80%80%E3%82%AA%E3%82%AF%E3%83%A9
( 95) http://www.greenfingers.com/
( 96) http://www.hottolink.com/ds/doblog/download/download.asp
( 97) http://www.naranougi.jp/kateisaien-point/yasai/okura.htm
( 98) http://www.sekine-lab.ei.tuat.ac.jp/~kanamaru/Chaos/
( 99) http://www2.odn.ne.jp/shokuzai/oishii.htm

::::::::::::::
URLContent.java
::::::::::::::
package IntelligentSpider;

import java.util.*;
import java.net.*;
import java.io.*;

/**
$Id: ResponseCode.html,v 1.1 2009/06/22 16:11:54 kishi Exp kishi $
@author KISHI Yasuhiro
*/

public class URLContent extends AbstractContent {

    /** 処理対象URL */
    private URL url;

    /** コネクション */
    private HttpURLConnection connection = null;

    /** レスポンスヘッダのリスト */
    private List responseHeaders = null;

    /** プロパティ */
    private Properties properties;

    /** レスポンスコード */
    private int responseCode;

    // コンストラクタ
    public URLContent( String urlString, String propFileName ) throws Exception {
        try {
            url = new URL( urlString );

            loadProperties( propFileName );

            retrieve();

            parse();
        } catch ( Exception e ) {
            throw e;
        }
    }

    /** プロパティ情報を格納するオブジェクトを取得する */
    public Properties getProperties() {
        return properties;
    }

    /**
    * プロパティファイルを読み込む
    */
    private void loadProperties( String propFileName ) throws Exception {
        properties = PropertyManager.getInstance( propFileName );
    }

    /** コネクションを取得する */
    public HttpURLConnection getConnection() {
        return connection;
    }

    /**
    * コネクションを設定する
    */
    private void setConnection() throws Exception {
        try {
            connection = ( HttpURLConnection ) url.openConnection(); // HttpURLConnectionクラスにキャストする必要あり

        } catch ( Exception e ) {
            throw e;
        }
    }

    /**
    * コネクションをクローズする
    */
    private void closeConnection() throws Exception {
        // レスポンスコードを取得する
        responseCode = connection.getResponseCode();

        connection.disconnect();
        connection = null;
    }

    /** レスポンスヘッダのリストを返す */
    public List getResponseHeaders() {
        return responseHeaders;
    }

    /** レスポンスヘッダを取得する */
    private void setResponseHeader() throws Exception {
        responseHeaders = ( new ResponseHeaderObtainer( connection ) ).getHeaders();
    }

    /** レスポンスボディを取得する */
    private void setResponseBody() throws Exception {

        String encoding = properties.getProperty( "IS.encoding" );
        bodyAsString = ( new ResponseBodyObtainer( connection, encoding ) ).getBody();
    }

    /**
    * コンテンツのボディを取得する
    */
    public void retrieve() throws Exception {

        //================================================
        // ソケットのプロパティの設定
        //================================================
        SystemPropertySetter.doSet( properties );

        //================================================
        // コネクションの設定
        //================================================
        setConnection();

        //================================================
        // コネクションプロパティを設定する
        //================================================
        ConnectionPropertySetter.doSet( this );

        /***************************************************************************/
        /* CookieContainerを参照して、既にサーバに対するCOOKIE文字列が取得済みなら */
        /* HTTPリクエストヘッダにCOOKIE文字列をセットして送る                      */
        /***************************************************************************/
        String host = getHost( );
        String cookieInfo = CookieContainer.getInstance().getCookieInfo( host );
        if ( cookieInfo != null ) {
            connection.setRequestProperty( "Cookie", cookieInfo );
            System.err.println( "	*** Adding HTTP Request header *** Cookie: " + cookieInfo );
        }

        //================================================
        // HTTP REFERERをリクエストヘッダにセットする
        //================================================
        // 未実装

        //================================================
        // レスポンスヘッダの取得
        //================================================
        setResponseHeader();

        //================================================
        // レスポンスボディの取得
        //================================================
        setResponseBody();

        //================================================
        // このコネクションCOOKIEヘッダをセットする
        // サーバが新しいSet-Cookieヘッダを吐いてきたら
        // HTTPレスポンスヘッダを読み取り、Set-Cookieヘッダの値を取り出し、更新する
        //====================================================================
        CookieContainer.getInstance().setCookieInfo( this );

        //================================================
        // コネクションの解放
        //================================================
        closeConnection();
    }

    /** 取得した内容を解析する */
    private void parse() {
        /** タイトルの取得 */
        title = ( new TitleExtractor() ).extract( bodyAsString );

        /** リンクの取得 */
        links = LinkRetriever.retrieve( url, responseHeaders, bodyAsString );

        /** プロパティ情報を参照して適宜フィルタを掛ける */
        links = LinkFilter.doFiltration( url, links, properties );
    }

    /** URLのホスト名を取得する
    * @return ホスト名
    */
    public String getHost() {
        return url.getHost();
    }

    /** 自身のURLを取得する
    * @return 自身のURL
    */
    public URL getUrl() {
        return url;
    }

    /** 自身のURLを取得する
    * @return 自身のURL
    */
    public int getResponseCode() {
        return responseCode;
    }

    /**
    * 単体テスト用メソッド
    */
    static public void main( String[] args ) throws Exception {

        Iterator iterator;

        URLContent content = new URLContent( args[ 0 ], args[ 1 ] );

        //--------------------------------------------
        // レスポンスヘッダの取得
        //--------------------------------------------
        List headers = content.getResponseHeaders();
        iterator = headers.iterator();

        int i = 0;
        while ( iterator.hasNext() ) {
            String[] pair = ( String[] ) iterator.next();

            System.out.printf( "[%2d] %s: %s\n", ++i, pair[ 0 ], pair[ 1 ] );
        }

        //--------------------------------------------
        // レスポンスコードの取得
        //--------------------------------------------
        System.out.println( "RESPONSE_CODE=" + content.getResponseCode() );

        //--------------------------------------------
        // レスポンスボディの取得
        //--------------------------------------------
        String body = content.getBodyAsString();

        //--------------------------------------------
        // タイトルの取得
        //--------------------------------------------
        System.out.println( "タイトル = " + content.getTitle() );

        //--------------------------------------------
        // リンクの取得
        //--------------------------------------------
        iterator = content.getLinks().iterator();
        i = 0;
        while ( iterator.hasNext() ) {
            String hyperLink = ( String ) iterator.next();
            System.out.printf( "(%3d) %s\n", ++i, hyperLink );
        }

        // レスポンスボディのダンプ
        // System.out.println( body );
    }
}
戻る inserted by FC2 system