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);
HttpURLConnection conn = (HttpURLConnection) serverUrl.openConnection();
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();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"utf-8");
BufferedReader bufferedReader = new 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();
}
}
相關文章: