打开与“最终”(非重定向)URL的HTTP连接

时间:2014-02-06 10:09:21

标签: java http httpurlconnection http-redirect http-response-codes

给定一个URL字符串,我希望获得与“最终”(非重定向)URL的HTTP连接:

  • 如果响应代码是2xx,那么我可以简单地使用初始连接。

  • 如果响应代码是3xx,那么我需要打开一个新连接并重试。

  • 对于任何其他响应代码(例如4xx或5xx),我“放弃”并返回null

我的代码如下:

HttpURLConnection getConnection(String url) throws Exception
{
    HttpURLConnection connection = (HttpURLConnection)new URL(url).openConnection();
    while (true)
    {
        connection.setInstanceFollowRedirects(true);
        connection.setRequestProperty("User-Agent","");
        int responseCode = connection.getResponseCode();
        switch (responseCode/100)
        {
        case 2:
            return connection;
        case 3:
            switch (responseCode)
            {
            case 300:
                connection = ???
                break;
            case 301:
            case 302:
            case 303:
            case 305:
            case 307:
                connection = (HttpURLConnection)new URL(connection.getHeaderField("Location")).openConnection();
                break;
            case 304:
                connection = ???
                break;
            default:
                return null;
            }
            break;
        default:
            return null;
        }
    }
}

特此提出问题:

  1. 我应该如何处理响应代码300和304?

  2. 我是否正确处理了响应代码301,302,303,305和307?

  3. 对上述方法的任何其他建设性意见也将受到赞赏。

    由于

1 个答案:

答案 0 :(得分:1)

虽然所有这些都是某种重定向,但想出一个可以处理它们的模型是很棘手的。

您可能需要阅读http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p2-semantics-26.html#rfc.section.6.4以获取更多信息。