天天看點

httpclient 調用遠端接口httpclient 調用遠端接口

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());
    }


}

           

繼續閱讀