1
给出一个URL字符串,我希望得到一个HTTP连接的“最后”(非重定向)网址:打开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?
对上述方法的任何其他建设性评论也将被赞赏。
感谢
所有的代码在这里http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html中定义,并且已经很好地解释了,但并不是所有的代码在你的情况下都有意义。问题是,你为什么想要处理它们呢? – dendini
因为我收到他们全部在不同的URL的响应代码! –
300到307似乎有意义,但为什么不简单地尝试它们?我不知道你连接到什么以及你发送了什么。例如,为什么你得到304返回?根据doc的说法:“如果客户端执行了条件GET请求并允许访问”,那么您发送给服务器的是什么? – dendini