给定一个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;
}
}
}
特此提出问题:
我应该如何处理响应代码300和304?
我是否正确处理了响应代码301,302,303,305和307?
对上述方法的任何其他建设性意见也将受到赞赏。
由于
答案 0 :(得分:1)
虽然所有这些都是某种重定向,但想出一个可以处理它们的模型是很棘手的。
您可能需要阅读http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p2-semantics-26.html#rfc.section.6.4以获取更多信息。