HttpURLConnection發送GET、POST請求
/**
* GET請求
*
* @param requestUrl 請求地址
* @return
*/
public String get(String requestUrl) {
HttpURLConnection connection = null;
InputStream is = null;
BufferedReader br = null;
String result = null;
try {
/** 創建遠程url連接對象 */
URL url = new URL(requestUrl);
/** 通過遠程url對象打開一個連接,強制轉換為HttpUrlConnection類型 */
connection = (HttpURLConnection) url.openConnection();
/** 設置連接方式:GET */
connection.setRequestMethod("GET");
/** 設置連接主機服務器超時時間:15000毫秒 */
connection.setConnectTimeout(15000);
/** 設置讀取遠程返回的數據時間:60000毫秒 */
connection.setReadTimeout(60000);
/** 設置通用的請求屬性 */
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 設置傳入參數的格式:請求參數應該是 name1=value1&name2=value2 的形式
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
/** 發送GET方式請求,使用connet方法建立和遠程資源之間的實際連接即可 */
connection.connect();
/*-------------------------->*/
/** 獲取所有相應頭字段 */
Map<String, List<String>> map = connection.getHeaderFields();
/** 遍歷響應頭字段 */
for (String key : map.keySet()) {
System.out.println(key + "---------->" + map.get(key));
}
/* <-------------------------- */
/** 請求成功:返回碼為200 */
if (connection.getResponseCode() == 200) {
/** 通過connection連接,獲取輸入流 */
is = connection.getInputStream();
/** 封裝輸入流is,並指定字符集 */
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
/** 存放數據 */
StringBuffer sbf = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
sbf.append(line);
sbf.append("\r\n");
}
result = sbf.toString();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
/** 關閉資源 */
try {
if (null != br) {
br.close();
}
if (null != is) {
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
/** 關閉遠程連接 */
// 斷開連接,最好寫上,disconnect是在底層tcp socket鏈接空閑時才切斷。如果正在被其他線程使用就不切斷。
// 固定多線程的話,如果不disconnect,鏈接會增多,直到收發不出信息。寫上disconnect后正常一些
connection.disconnect();
System.out.println("--------->>> GET request end <<<----------");
}
return result;
}
/**
* POST請求
*
* @param requestUrl 請求地址
* @param param 請求數據
* @return
*/
public String post(String requestUrl, String param) {
HttpURLConnection connection = null;
InputStream is = null;
OutputStream os = null;
BufferedReader br = null;
String result = null;
try {
/** 創建遠程url連接對象 */
URL url = new URL(requestUrl);
/** 通過遠程url對象打開一個連接,強制轉換為HttpUrlConnection類型 */
connection = (HttpURLConnection) url.openConnection();
/** 設置連接方式:POST */
connection.setRequestMethod("POST");
/** 設置連接主機服務器超時時間:15000毫秒 */
connection.setConnectTimeout(15000);
/** 設置讀取遠程返回的數據時間:60000毫秒 */
connection.setReadTimeout(60000);
/** 設置是否向httpUrlConnection輸出,設置是否從httpUrlConnection讀入,此外發送post請求必須設置這兩個 */
// 默認值為:false,當向遠程服務器傳送數據/寫數據時,需要設置為true
connection.setDoOutput(true);
// 默認值為:true,當前向遠程服務讀取數據時,設置為true,該參數可有可無
connection.setDoInput(true);
/** 設置通用的請求屬性 */
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 設置傳入參數的格式:請求參數應該是 name1=value1&name2=value2 的形式
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
/** 通過連接對象獲取一個輸出流 */
os = connection.getOutputStream();
/** 通過輸出流對象將參數寫出去/傳輸出去,它是通過字節數組寫出的 */
// 若使用os.print(param);則需要釋放緩存:os.flush();即使用字符流輸出需要釋放緩存,字節流則不需要
if(param != null && param.length() > 0) {
os.write(param.getBytes());
}
/** 請求成功:返回碼為200 */
if (connection.getResponseCode() == 200) {
/** 通過連接對象獲取一個輸入流,向遠程讀取 */
is = connection.getInputStream();
/** 封裝輸入流is,並指定字符集 */
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
/** 存放數據 */
StringBuffer sbf = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
sbf.append(line);
sbf.append("\r\n");
}
result = sbf.toString();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
/** 關閉資源 */
try {
if (null != br) {
br.close();
}
if (null != is) {
is.close();
}
if (null != os) {
os.close();
}
} catch (Exception e) {
e.printStackTrace();
}
/** 關閉遠程連接 */
// 斷開連接,最好寫上,disconnect是在底層tcp socket鏈接空閑時才切斷。如果正在被其他線程使用就不切斷。
// 固定多線程的話,如果不disconnect,鏈接會增多,直到收發不出信息。寫上disconnect后正常一些
connection.disconnect();
System.out.println("--------->>> POST request end <<<----------");
}
return result;
}
參考:https://blog.csdn.net/u012513972/article/details/79569888