使用HttpClient调用API接口

使用HttpClient调用API接口

你的问题在于书读得不多,而想得太多

一、添加maven依赖

<dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.6</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.3</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
</dependencies>

二、编写返回对象

import java.io.Serializable;

/**
 * @program: demo
 * @description: HttpClient返回对象
 * @author: slx
 * @create: 2019-03-13 13:21
 **/
public class HttpResult implements Serializable {

    // 响应的状态码
    private int code;

    // 响应的响应体
    private String body;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }
}

三、封装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;


/**
 * @program: demo
 * @description: HttpClient工具类
 * @author: slx
 * @create: 2019-03-13 13:21
 **/
public class HttpClientUtil {

    private CloseableHttpClient httpClient;

    public HttpClientUtil() {
        // 1 创建HttpClinet,相当于打开浏览器
        httpClient = HttpClients.createDefault();
    }

    /* *
     * get请求
     * @author slx
     * @date 2019/03/13 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 slx
     * @date 2019/03/13 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 slx
     * @date 2019/03/13 13: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 slx
     * @date 2019/03/13 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;
    }
}

四、调用接口进行测试(以选单网为例)

import org.junit.Before;
import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

/**
 * @program: demo
 * @description: 调用测试
 * @author: slx
 * @create: 2019-03-13 13:21
 **/

public class ApiServiceTest {

    private HttpClientUtil apiService;

    private static final String appKey = "";

    @Before
    public void init() {
        this.apiService = new HttpClientUtil();
    }

    /**
     * 普通产品API接口
     * @throws Exception
     */
    @Test
    public void testGeneralProductApi() throws Exception {

        String url = "http://api.xuandan.com/DataApi/index";

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("AppKey",appKey);
        map.put("page",1);
        map.put("cid",0);
        HttpResult httpResult = apiService.doGet(url,map);

        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());

    }

    /**
     * 选单预告API接口
     * @throws Exception
     */
    @Test
    public void testHotGoodsApi() throws Exception {

        String url = "http://api.xuandan.com/DataApi/HotGoods";

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("AppKey",appKey);
        map.put("type",2);
        map.put("page",1);
        HttpResult httpResult = apiService.doGet(url,map);

        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());

    }


    /**
     * 朋友圈爆款API
     * @throws Exception
     */
    @Test
    public void testPyqGoodsApi() throws Exception {

        String url = "http://api.xuandan.com/DataApi/PyqGoods";

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("AppKey",appKey);
        map.put("type",2);
        HttpResult httpResult = apiService.doGet(url,map);

        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());

    }

    /**
     * 销量排行API接口
     * @throws Exception
     */
    @Test
    public void testSalesRankingApi() throws Exception {

        String url = "http://api.xuandan.com/DataApi/index";

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("AppKey",appKey);
        map.put("type",6);
        HttpResult httpResult = apiService.doGet(url,map);

        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());

    }

    /**
     * 单品详情API接口
     * @throws Exception
     */
    @Test
    public void testOrderItemApi() throws Exception {

        String url = "http://api.xuandan.com/DataApi/item";

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("AppKey",appKey);
        map.put("id","530483020458");
        HttpResult httpResult = apiService.doGet(url,map);

        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());

    }

    /**
     * 2小时销量API接口
     * @throws Exception
     */
    @Test
    public void testTop100TwoHoursApi() throws Exception {

        String url = "http://api.xuandan.com/DataApi/Top100";

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("AppKey",appKey);
        map.put("type",4);
        HttpResult httpResult = apiService.doGet(url,map);

        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());

    }

    /**
     * 全天销量API接口
     * @throws Exception
     */
    @Test
    public void testTop100WithOneDayApi() throws Exception {

        String url = "http://api.xuandan.com/DataApi/Top100";

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("AppKey",appKey);
        map.put("type",3);
        HttpResult httpResult = apiService.doGet(url,map);

        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());

    }

    /**
     * 下架产品API
     * @throws Exception
     */
    @Test
    public void testDownGoodsApi() throws Exception {

        String url = "http://api.xuandan.com/DataApi/Down_Goods";

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("AppKey",appKey);
        map.put("hour",1);
        map.put("page",1);
        HttpResult httpResult = apiService.doGet(url,map);

        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());

    }

    /**
     * 微信文案API
     * @throws Exception
     */
    @Test
    public void testPyqGoodsPageApi() throws Exception {

        String url = "http://api.xuandan.com/DataApi/PyqGoodsPage";

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("AppKey",appKey);
        map.put("hour",1);
        map.put("page",1);
        HttpResult httpResult = apiService.doGet(url,map);

        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());

    }

    /**
     * 检测商品是否存在
     * @throws Exception
     */
    @Test
    public void testCheckItemApi() throws Exception {

        String url = "http://api.xuandan.com/DataApi/checkitem";

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("AppKey",appKey);
        map.put("id","575622863669");
        HttpResult httpResult = apiService.doGet(url,map);

        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());

    }

    /**
     * 单品转链Api
     * pid授权
     * @throws Exception
     */
    @Test
    public void testGetItemTklLinkApi() throws Exception {

        String url = "http://api.xuandan.com/DataApi/GetItemTklLink";

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("AppKey",appKey);
        map.put("id","533817409684");
        HttpResult httpResult = apiService.doGet(url,map);

        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());

    }

    /**
     *文章Api
     * @throws Exception
     */
    @Test
    public void testGetArticleApi() throws Exception {

        String url = "http://api.xuandan.com/DataApi/GetArticle";

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("AppKey",appKey);
        HttpResult httpResult = apiService.doGet(url,map);

        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());

    }


    /**
     * 微信文案Api(新)
     * @throws Exception
     */
    @Test
    public void testGetGoodsPyqApi() throws Exception {

        String url = "http://api.xuandan.com/DataApi/GetGoodsPyq";

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("AppKey",appKey);
        map.put("key","");
        map.put("pagesize",1);
        HttpResult httpResult = apiService.doGet(url,map);

        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());

    }

    /**
     * 查询
      */
    @Test
    public void testQueryItemById() throws Exception {

        String url = "https://www.apiopen.top/weatherApi";

        Map<String, Object> map = new HashMap<String, Object>();
        //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 {

        String url = "https://www.i12368.com/preservation/auth/checkUser";

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

    }



    /**
     * 修改
     * @throws Exception
     */
    @Test
    public void testUpdateItem() throws Exception {

        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 {

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

    }
}

五、小结

此demo直接复制整合即可使用,需要完整版也可下方给我留言。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值