httpclient 調用遠端接口
依賴jar包 httpclient:4.5.6.jar httpcore:4.4.3
封裝HttpClient接口
package com.example.HttpClient;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.*;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
//需要引入的jar包
//compile('org.apache.httpcomponents:httpclient:4.5.6')
//compile('org.apache.httpcomponents:httpcore:4.4.3')
/**
* @program: webservice_demo
* @description: HttpClient工具類
* @author: miaoqixin
* @create: 2018-11-28 16:39
**/
public class HttpClientUtil {
private CloseableHttpClient httpClient;
public HttpClientUtil() {
// 1 建立HttpClinet,相當于打開浏覽器
httpClient = HttpClients.createDefault();
}
/* *
* get請求
* @author miaoqixin
* @date 2018/11/28 16:51
* @param [url, map]
* @return HttpResult
*/
public HttpResult doGet(String url, Map<String, Object> map) throws Exception {
// 聲明URIBuilder
URIBuilder uriBuilder = new URIBuilder(url);
// 判斷參數map是否為非空
if (map != null) {
// 周遊參數
for (Map.Entry<String, Object> entry : map.entrySet()) {
// 設定參數
uriBuilder.setParameter(entry.getKey(), entry.getValue().toString());
}
}
// 2 建立httpGet對象,相當于設定url請求位址
HttpGet httpGet = new HttpGet(uriBuilder.build());
// 3 使用HttpClient執行httpGet,相當于按回車,發起請求
CloseableHttpResponse response = null;
try {
response = httpClient.execute(httpGet);
} catch (IOException e) {
HttpResult httpResult = new HttpResult();
httpResult.setCode(404);
httpResult.setBody("請求失敗");
return httpResult;
}
// 4 解析結果,封裝傳回對象httpResult,相當于顯示相應的結果
// 狀态碼
// response.getStatusLine().getStatusCode();
// 響應體,字元串,如果response.getEntity()為空,下面這個代碼會報錯,是以解析之前要做非空的判斷
// EntityUtils.toString(response.getEntity(), "UTF-8");
HttpResult httpResult = new HttpResult();
// 解析資料封裝HttpResult
if (response.getEntity() != null) {
//httpResult = new HttpResult(response.getStatusLine().getStatusCode(),EntityUtils.toString(response.getEntity(),"UTF-8"));
httpResult.setCode(response.getStatusLine().getStatusCode());
httpResult.setBody(EntityUtils.toString(response.getEntity(),"UTF-8"));
} else {
//httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
httpResult.setCode(response.getStatusLine().getStatusCode());
//httpResult.setBody("");
}
// 傳回
return httpResult;
}
/* *
* post請求
* @author miaoqixin
* @date 2018/11/28 18:13
* @param [url, map]
* @return com.example.HttpClient.HttpResult
*/
public HttpResult doPost(String url, Map<String, Object> map) throws Exception {
// 聲明httpPost請求
HttpPost httpPost = new HttpPost(url);
// 判斷map不為空
if (map != null) {
// 聲明存放參數的List集合
List<NameValuePair> params = new ArrayList<NameValuePair>();
// 周遊map,設定參數到list中
for (Map.Entry<String, Object> entry : map.entrySet()) {
params.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
}
// 建立form表單對象
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params, "UTF-8");
// 把表單對象設定到httpPost中
httpPost.setEntity(formEntity);
}
// 使用HttpClient發起請求,傳回response
CloseableHttpResponse response = null;
try {
response = httpClient.execute(httpPost);
} catch (IOException e) {
HttpResult httpResult = new HttpResult();
httpResult.setCode(404);
httpResult.setBody("請求失敗");
return httpResult;
}
// 解析response封裝傳回對象httpResult
HttpResult httpResult = new HttpResult();
// 解析資料封裝HttpResult
if (response.getEntity() != null) {
//httpResult = new HttpResult(response.getStatusLine().getStatusCode(),EntityUtils.toString(response.getEntity(),"UTF-8"));
httpResult.setCode(response.getStatusLine().getStatusCode());
httpResult.setBody(EntityUtils.toString(response.getEntity(),"UTF-8"));
} else {
//httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
httpResult.setCode(response.getStatusLine().getStatusCode());
//httpResult.setBody("");
}
// 傳回結果
return httpResult;
}
/* *
* Put請求
* @author miaoqixin
* @date 2018/11/28 18:14
* @param [url, map]
* @return com.example.HttpClient.HttpResult
*/
public HttpResult doPut(String url, Map<String, Object> map) throws Exception {
// 聲明httpPost請求
HttpPut httpPut = new HttpPut(url);
// 判斷map不為空
if (map != null) {
// 聲明存放參數的List集合
List<NameValuePair> params = new ArrayList<NameValuePair>();
// 周遊map,設定參數到list中
for (Map.Entry<String, Object> entry : map.entrySet()) {
params.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
}
// 建立form表單對象
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params, "UTF-8");
// 把表單對象設定到httpPost中
httpPut.setEntity(formEntity);
}
// 使用HttpClient發起請求,傳回response
CloseableHttpResponse response = null;
try {
response = httpClient.execute(httpPut);
} catch (IOException e) {
HttpResult httpResult = new HttpResult();
httpResult.setCode(404);
httpResult.setBody("請求失敗");
return httpResult;
}
// 解析response封裝傳回對象httpResult
HttpResult httpResult = new HttpResult();
// 解析資料封裝HttpResult
if (response.getEntity() != null) {
//httpResult = new HttpResult(response.getStatusLine().getStatusCode(),EntityUtils.toString(response.getEntity(),"UTF-8"));
httpResult.setCode(response.getStatusLine().getStatusCode());
httpResult.setBody(EntityUtils.toString(response.getEntity(),"UTF-8"));
} else {
//httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
httpResult.setCode(response.getStatusLine().getStatusCode());
//httpResult.setBody("");
}
// 傳回結果
return httpResult;
}
/* *
* Delete請求
* @author miaoqixin
* @date 2018/11/28 18:20
* @param [url, map]
* @return com.example.HttpClient.HttpResult
*/
public HttpResult doDelete(String url, Map<String, Object> map) throws Exception {
// 聲明URIBuilder
URIBuilder uriBuilder = new URIBuilder(url);
// 判斷參數map是否為非空
if (map != null) {
// 周遊參數
for (Map.Entry<String, Object> entry : map.entrySet()) {
// 設定參數
uriBuilder.setParameter(entry.getKey(), entry.getValue().toString());
}
}
// 2 建立httpGet對象,相當于設定url請求位址
HttpDelete httpDelete = new HttpDelete(uriBuilder.build());
// 3 使用HttpClient執行httpGet,相當于按回車,發起請求
CloseableHttpResponse response = null;
try {
response = httpClient.execute(httpDelete);
} catch (IOException e) {
HttpResult httpResult = new HttpResult();
httpResult.setCode(404);
httpResult.setBody("請求失敗");
return httpResult;
}
// 4 解析結果,封裝傳回對象httpResult,相當于顯示相應的結果
// 狀态碼
// response.getStatusLine().getStatusCode();
// 響應體,字元串,如果response.getEntity()為空,下面這個代碼會報錯,是以解析之前要做非空的判斷
// EntityUtils.toString(response.getEntity(), "UTF-8");
HttpResult httpResult = new HttpResult();
// 解析資料封裝HttpResult
if (response.getEntity() != null) {
//httpResult = new HttpResult(response.getStatusLine().getStatusCode(),EntityUtils.toString(response.getEntity(),"UTF-8"));
httpResult.setCode(response.getStatusLine().getStatusCode());
httpResult.setBody(EntityUtils.toString(response.getEntity(),"UTF-8"));
} else {
//httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
httpResult.setCode(response.getStatusLine().getStatusCode());
//httpResult.setBody("");
}
// 傳回
return httpResult;
}
}
建立HttpClient調用接口的傳回實體
package com.example.HttpClient;
import lombok.Data;
import java.io.Serializable;
/**
* @program: webservice_demo
* @description: HttpClient傳回對象
* @author: miaoqixin
* @create: 2018-11-28 16:54
**/
@Data
public class HttpResult implements Serializable {
// 響應的狀态碼
private int code;
// 響應的響應體
private String body;
}
然後用我們通過junit來測試一下接口
package com.example.HttpClient;
import org.junit.Before;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
/**
* @program: webservice_demo
* @description: 調用測試
* @author: miaoqixin
* @create: 2018-11-28 17:21
**/
public class APIServiceTest {
private HttpClientUtil apiService;
@Before
public void init() {
this.apiService = new HttpClientUtil();
}
// 查詢
@Test
public void testQueryItemById() throws Exception {
// http://manager.aaaaaa.com/rest/item/interface/{id}
String url = "https://www.apiopen.top/weatherApi";
Map<String, Object> map = new HashMap<>();
//map.put("id",22222);
//map.put("name",33333);
HttpResult httpResult = apiService.doGet(url,map);
System.out.println(httpResult.getCode());
System.out.println(httpResult.getBody());
}
// 新增
@Test
public void testSaveItem() throws Exception {
// http://manager.aaaaaa.com/rest/item/interface/{id}
String url = "https://www.i12368.com/preservation/auth/checkUsera";
Map<String, Object> map = new HashMap<String, Object>();
// title=測試RESTful風格的接口&price=1000&num=1&cid=888&status=1
map.put("userId", 12343474);
HttpResult httpResult = apiService.doPost(url, map);
System.out.println(httpResult.getCode());
System.out.println(httpResult.getBody());
}
// 修改
@Test
public void testUpdateItem() throws Exception {
// http://manager.aaaaaa.com/rest/item/interface/{id}
String url = "http://manager.aaaaaa.com/rest/item/interface";
Map<String, Object> map = new HashMap<String, Object>();
// title=測試RESTful風格的接口&price=1000&num=1&cid=888&status=1
map.put("title", "測試APIService調用修改接口");
map.put("id", "44");
HttpResult httpResult = apiService.doPut(url, map);
System.out.println(httpResult.getCode());
System.out.println(httpResult.getBody());
}
// 删除
@Test
public void testDeleteItemById() throws Exception {
// http://manager.aaaaaa.com/rest/item/interface/{id}
String url = "http://manager.aaaaaa.com/rest/item/interface/44";
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", "44");
HttpResult httpResult = apiService.doDelete(url, map);
System.out.println(httpResult.getCode());
System.out.println(httpResult.getBody());
}
}