下文筆者講述使用Java代碼模拟浏覽器請求的方法分享,如下所示:
實作思路:
使用HttpURLConnection類即可模拟浏覽器通路
例:
package com.java265.other;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class HttpURLConnectionTest {
public static final String GET_URL = "http://java265.com";
public static final String POST_URL = "http://java265.com";
/**
* 接口調用 GET
*/
public static void httpURLConectionGET() {
try {
URL url = new URL(GET_URL); // 把字元串轉換為URL請求位址
HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 打開連接配接
connection.connect();// 連接配接會話
// 擷取輸入流
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {// 循環讀取流
sb.append(line);
}
br.close();// 關閉流
connection.disconnect();// 斷開連接配接
System.out.println(sb.toString());
} catch (Exception e) {
e.printStackTrace();
System.out.println("失敗!");
}
}
/**
* 接口調用 POST
*/
public static void httpURLConnectionPOST () {
try {
URL url = new URL(POST_URL);
// 将url 以 open方法傳回的urlConnection 連接配接強轉為HttpURLConnection連接配接 (辨別一個url所引用的遠端對象連接配接)
HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 此時cnnection隻是為一個連接配接對象,待連接配接中
// 設定連接配接輸出流為true,預設false (post 請求是以流的方式隐式的傳遞參數)
connection.setDoOutput(true);
// 設定連接配接輸入流為true
connection.setDoInput(true);
// 設定請求方式為post
connection.setRequestMethod("POST");
// post請求緩存設為false
connection.setUseCaches(false);
// 設定該HttpURLConnection執行個體是否自動執行重定向
connection.setInstanceFollowRedirects(true);
// 設定請求頭裡面的各個屬性 (以下為設定内容的類型,設定為經過urlEncoded編碼過的from參數)
// application/x-javascript text/xml->xml資料 application/x-javascript->json對象 application/x-www-form-urlencoded->表單資料
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// 建立連接配接 (請求未開始,直到connection.getInputStream()方法調用時才發起,以上各個參數設定需在此方法之前進行)
connection.connect();
// 建立輸入輸出流,用于往連接配接裡面輸出攜帶的參數,(輸出内容為?後面的内容)
DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
String parm = "storeId=" + URLEncoder.encode("32", "utf-8"); //URLEncoder.encode()方法 為字元串進行編碼
// 将參數輸出到連接配接
dataout.writeBytes(parm);
// 輸出完成後重新整理并關閉流
dataout.flush();
dataout.close(); // 重要且易忽略步驟 (關閉流,切記!)
System.out.println(connection.getResponseCode());
// 連接配接發起請求,處理伺服器響應 (從連接配接擷取到輸入流并包裝為bufferedReader)
BufferedReader bf = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
StringBuilder sb = new StringBuilder(); // 用來存儲響應資料
// 循環讀取流,若不到結尾處
while ((line = bf.readLine()) != null) {
sb.append(bf.readLine());
}
bf.close(); // 重要且易忽略步驟 (關閉流,切記!)
connection.disconnect(); // 銷毀連接配接
System.out.println(sb.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
httpURLConnectionPOST();
}
}