java 访问get接口请求外部的json数据

2020年4月24日 1030点热度 0人点赞 0条评论

小编这段时间在写淘客的项目,需要用到这get请求,小编就顺便做一下笔记。

Java访问get请求,前端的Ajax也可以做,但是第三方的api接口都是有一个文件加密的,这种加密第三方api接口只提供了后端访问,也或者说后端有这个方便处理加密的问题,而JS就没有,所以有时候不得不用后端请求数据。

 

 

jar包

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.6</version>
</dependency>

工具类(HttpUtils)

package cn.dt2008.util;

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 org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class HttpUtils {

    /**
     * get请求不带参数
     * @param url 访问json数据接口
     * @return
     */
    public static String doGet(String url) {
        CloseableHttpClient client = HttpClients.createDefault();
        HttpGet httpGet = new HttpGet(url);
        CloseableHttpResponse response = null;
        try {
            response = client.execute(httpGet);
            HttpEntity entity = response.getEntity();
            return EntityUtils.toString(entity, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    
    /**
     * get请求带参数
     * @param getUrl 访问json数据接口
     * @param paraMap 参数
     * @return
     */
    public static String sendGet(String getUrl,Map<String, String> paraMap){
        if(paraMap == null){
            paraMap = new HashMap<>();
        }
        paraMap= new TreeMap<>(paraMap);
        StringBuilder sb = new StringBuilder();
        paraMap.entrySet().stream().forEach(entry ->{
            sb.append(entry.getKey());
            sb.append("=");
            sb.append(entry.getValue());
            sb.append("&");
        });
        getUrl = getUrl.contains("?")?getUrl:getUrl+"?";
        return doGet(getUrl+sb.toString());
    }
}

 

上面两个方法都写注释了,一个是带参数的(doGet(URL)),一个是不带参数的(sendGet(URL, 请求参数))

小编用了 枫瑞博客网 的列表接口做一次案例

doGet(URL)请求(不带参数)

@Test
public void doGet(){
    String url = "https://www.frbkw.com//wp-json/wp/v2/posts";
    System.out.println(HttpUtils.doGet(url));
}

sendGet(URL, 请求参数)请求(带参数)

小编做一个列表分页

@Test
public void sendGet(){
    String url = "https://www.frbkw.com//wp-json/wp/v2/posts";
    Map<String, String> paraMap = new HashMap<>();
    paraMap.put("page", "2");
    System.out.println(HttpUtils.sendGet(url, paraMap));
}

参数已经请求打印出来了

 

 

希望这篇文章对您有帮助。

posted @   疯子110  阅读(943)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2020-03-13 postgreSQL数据库limit分页、排序
2020-03-13 mybatis 中标签bool值类型为false判断
2020-03-13 (转)SpringCloud之服务网关Gateway
2018-03-13 ArcGIS Server 10 Java 版的Rest服务的部署方法
2018-03-13 ArcGIS Server Java 9.3 REST API的中文查询问题的解决方案
点击右上角即可分享
微信分享提示