在没有Apache的情况下从301重定向中抓取URL

时间:2012-06-14 01:01:19

标签: java sockets redirect

我的公司不使用Apache,因此我们已经开始使用自己的套接字代码。在下面,HTMLDoc是我的服务器响应版本。我正在尝试获取浏览器重定向到的URL,如果原始URL提供了301响应代码:

    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做一个我不熟悉的快速电话吗?

1 个答案:

答案 0 :(得分:1)

HTTP 301 response始终伴有Location标头。典型的响应看起来像

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

您可以阅读此标题并获取重定向的网址。 Jon Lin在上面的评论中发布的链接中提到了sample code这样做。