前言
-
在演示的功能代碼中使用的請求http地址為:
http://timor.tech/api/holiday/year/
接口說明:獲取指定年份或年月份的所有節假日信息。默認返回當前年份的所有信息。
跳轉鏈接:免費節假日 API
-
以上功能代碼僅在使用GET請求方式時測試通過,POST等其他請求時請自行嘗試。
-
因未設置請求頭時也成功獲取了響應數據,所以未在演示代碼中添加請求頭信息,請求失敗時可自行添加請求頭信息后重試
方式一:功能實現類 java.net.HttpURLConnection
請求實現代碼:
package com.zhiyin.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class MyTest {
public static void main(String[] args) {
test();
}
// HttpURLConnection方式
public static void test() {
String SUBMIT_METHOD_GET = "GET"; // 一定要是大寫,否則請求無效
String urlStr = "http://timor.tech/api/holiday/year/"; // 請求http地址
String param = "2020"; // 請求參數
HttpURLConnection connection = null;
InputStream is = null;
BufferedReader br = null;
String result = null; // 返回結果字符串
try {
// 創建遠程url連接對象
URL url = new URL(urlStr);
// 通過遠程url連接對象打開一個連接,強轉成httpURLConnection類
connection = (HttpURLConnection) url.openConnection();
// 設置連接方式:GET
connection.setRequestMethod(SUBMIT_METHOD_GET);
// 設置連接主機服務器的超時時間:15000毫秒
connection.setConnectTimeout(15000);
// 設置讀取遠程返回的數據時間:60000毫秒
connection.setReadTimeout(60000);
// 發送請求
connection.connect();
// 通過connection連接,請求成功后獲取輸入流
if (connection.getResponseCode() == 200) {
is = connection.getInputStream();
// 封裝輸入流is,並指定字符集
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
// 存放數據
StringBuffer sbf = new StringBuffer();
String temp = null;
while ((temp = br.readLine()) != null) {
sbf.append(temp);
}
result = sbf.toString();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 釋放資源
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != is) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
connection.disconnect(); // 關閉遠程連接
}
System.out.println("Successfully:" + result);
}
}
方式二:功能實現類 org.apache.http.client.methods.HttpGet
maven項目中pom.xml文件里引入依賴:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
請求實現代碼:
package com.zhiyin.test;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import java.io.InputStream;
public class MyTest {
public static void main(String[] args) {
test();
}
// HttpGet方式
public static void test() {
try {
String urlStr = "http://timor.tech/api/holiday/year/"; // 請求http地址
String param = "2020"; // 請求參數
// 模擬(創建)一個瀏覽器用戶
CloseableHttpClient client = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(urlStr + param);
// httpclient進行連接
CloseableHttpResponse response = client.execute(httpGet);
// 獲取內容
HttpEntity entity = response.getEntity();
// 將內容轉化成IO流
InputStream content = entity.getContent();
// 輸入流轉換成字符串
byte[] byteArr = new byte[content.available()];
content.read(byteArr); // 將輸入流寫入到字節數組中
String result = new String(byteArr);
System.out.println("Successfully:" + result);
} catch (Exception e) {
e.printStackTrace();
}
}
}