Java 使用HttpUrlConnection无法获取正确的标头响应代码
我有一个简单的情况 给定一个URL,服务器头响应代码将是HTTP 200 现在我正在尝试另一个URL,其中服务器首先使用HTTP302(找到)进行响应,然后重定向并使用头HTTP200代码进行响应 因此,在第二种情况下,为什么Java 使用HttpUrlConnection无法获取正确的标头响应代码,java,android,http,httpurlconnection,Java,Android,Http,Httpurlconnection,我有一个简单的情况 给定一个URL,服务器头响应代码将是HTTP 200 现在我正在尝试另一个URL,其中服务器首先使用HTTP302(找到)进行响应,然后重定向并使用头HTTP200代码进行响应 因此,在第二种情况下,为什么connection.getResponseCode()不返回HTTP 302,而是直接返回HTTP 200。实际上,我对检查初始HTTP 302响应中的头响应感兴趣 下面是简化的HttpUrlConnection代码(几乎是许多开源实现的复制品) private int
connection.getResponseCode()
不返回HTTP 302,而是直接返回HTTP 200。实际上,我对检查初始HTTP 302响应中的头响应感兴趣
下面是简化的HttpUrlConnection代码(几乎是许多开源实现的复制品)
private int responseCode;
私人地图领馆;
公共字符串getString(字符串url)
{
字符串响应=null;
尝试
{
URL mUrl=新URL(URL);
HttpURLConnection connection=(HttpURLConnection)mUrl.openConnection();
connection.setRequestMethod(“GET”);
responseCode=connection.getResponseCode();
headerFields=connection.getHeaderFields();
/*用于获取流+StringBuilder等的样板缓冲读取器内容*/
}
最后
{
连接断开();
}
返回响应;
}
额外信息:HTTP 302包含头键:“location”,尽管与预期一样,
connection.getheaderFields()不包含它 您可以配置是否自动遵循重定向;看。我明白了。尽管在这种情况下,setInstanceFollowRedirects
将是正确的处理方式。不过,设置此选项会给我一个不同的响应代码,即HTTP 301(永久移动)。但是它确实给了我我要找的头球键。不管怎样,谢谢。
private int responseCode;
private Map<String, List<String>> headerFields;
public String getString(String url)
{
String response = null;
try
{
URL mUrl = new URL(url);
HttpURLConnection connection = (HttpURLConnection) mUrl.openConnection();
connection.setRequestMethod("GET");
responseCode = connection.getResponseCode();
headerFields = connection.getHeaderFields();
/* boilerplate buffered reader stuffs for getting stream + StringBuilder etc etc.*/
}
finally
{
connection.disconnect();
}
return response;
}