java http 302重定向_Java 纯HTTP请求 禁止302自动重定向

在Java中使用纯HTTP GET方法来获取响应内容时,在发生302重定向的情况下,通过模拟请求域来获取重定向后的响应内容。
关键点:设置conn.setInstanceFollowRedirects为false即可
示例代码
public static void main(String[] args) {
try {
StringBuffer buffer = new StringBuffer();
String url = "http://localhost:8080/istock/login?u=name&p=pass";
System.out.println("访问地址:" + url);
//发送get请求
URL serverUrl = new URL(url);
通过强制类型转换将结果类型的变量conn赋值为HttpURLConnection类型的实例。
conn.setRequestMethod("GET");
//必须设置false,否则会自动redirect到重定向后的地址
conn.setInstanceFollowRedirects(false);
conn.addRequestProperty("Accept-Charset", "UTF-8;");
conn.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Firefox/3.6.8");
conn.addRequestProperty("Referer", "http://matols.com/");
conn.connect();
//判定是否会进行302重定向
if (conn.getResponseCode() == 302) {
如果发生重定向事件时,请设置302跳转目标地址,并同时设置Cookies信息;之后再次发起请求以模拟此场景
String location = conn.getHeaderField("Location");
String cookies = conn.getHeaderField("Set-Cookie");
serverUrl = new URL(location);
conn = (HttpURLConnection) serverUrl.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Cookie", cookies);
conn.addRequestProperty("Accept-Charset", "UTF-8;");
conn.addRequestProperty('User-Agent属性', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Firefox/3.6.8');
conn.addRequestProperty("Referer", "http://matols.com/");
conn.connect();
System.out.println("跳转地址:" + location);
}
//将返回的输入流转换成字符串
InputStream inputStream = conn.getInputStream();
CharacterReaderImpl inputStreamReader = new ReaderImpl(inputStream, "utf-8");
创建一个新的BufferedReader实例,并将其与inputStreamReader绑定在一起
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
// 释放资源
inputStream.close();
inputStream = null;
System.out.println(buffer.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
相关文章:
