0

私の会社はApacheを使用していないので、独自のソケットコードを作成しました。以下では、HTMLDocはサーバー応答の私のバージョンです。元のURLが301応答コードを提供した場合にブラウザがリダイレクトするURLを取得しようとしています。

    static public void main(String args[]) throws Exception
{

    String spec = "http://some_url_with_301_redirect.com";
    URL my_url = new URL(spec);

    HTMLDoc doc = getDocFromURL(my_url);

    // Do stuff with the doc.
}

public static HTMLDoc getDocFromURL(URL url)
{
    try
    {
        URLConnection u = url.openConnection();

        if ( u instanceof HttpURLConnection )
        {
            HttpURLConnection http_u = (HttpURLConnection)u;

            int response_code = http_u.getResponseCode();

            if (response_code == 300 || response_code == 301 || response_code == 302)
            {
                URL redirected_url = getRedirectedURL(url);

                return getDocFromURL(redirected_url);
            }
        }

        return null;
    }

    catch(Exception e) 
    {
        e.printStackTrace();
        return null;
    }
}

問題は、getRedirectedURL(url)メソッドがどのようになるかわかりません。なじみのないhttp_uへの簡単な電話はありますか?

4

1 に答える 1

1

HTTP 301応答には、常にLocationヘッダーが付いています。典型的な応答は次のようになります

HTTP/1.1 301 Moved Permanently
Location: http://www.example.org/index.asp

このヘッダーを読んで、リダイレクトされたURLを取得できます。これを行うためのサンプルコードは、上記のコメントのJonLinによって投稿されたリンクに記載されています。

于 2012-06-14T03:04:03.237 に答える