Java连接第三方接口获取数据

第一步

pom文件添加如下依赖

<!--HttpClient-->
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>

        <!--fastjson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.32</version>
        </dependency>

第二步:代码实现

GET请求
/**
     *  httpClient的get请求方式
     *  使用GetMethod来访问一个URL对应的网页实现步骤:
     *  1.生成一个HttpClient对象并设置相应的参数;
     *  2.生成一个GetMethod对象并设置响应的参数;
     *  3.用HttpClient生成的对象来执行GetMethod生成的Get方法;
     *  4.处理响应状态码;
     *  5.若响应正常,处理HTTP响应内容;
     *  6.释放连接。
     * @param url 请求第三方接口地址
     * @param charset 编码,一般为UFT-8
     * @param token token
     * @param nameValuePairs  拼接参数
     * @return
     */
    public static String doGet(String url, String charset, String token, NameValuePair[] nameValuePairs) {
        //1.生成HttpClient对象并设置参数
        HttpClient httpClient = new HttpClient();
        //设置Http连接超时为5秒
        httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(10000);
        //2.生成GetMethod对象并设置参数
        GetMethod getMethod = new GetMethod(url);
        //设置get请求超时为5秒
        getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 30000);
        if(nameValuePairs != null)
            getMethod.setQueryString(nameValuePairs);
        //设置请求重试处理,用的是默认的重试处理:请求三次
        getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
        if (!token.equals("")) {
            getMethod.addRequestHeader("Authorization", token);
        }
        String response = "";
        //3.执行HTTP GET 请求
        try {
            int statusCode = httpClient.executeMethod(getMethod);
            //4.判断访问的状态码
            if (statusCode != HttpStatus.SC_OK) {
                System.err.println("请求出错:" + getMethod.getStatusLine());
            }
            //5.处理HTTP响应内容
            //HTTP响应头部信息,这里简单打印
            Header[] headers = getMethod.getResponseHeaders();
            for (Header h : headers) {
                System.out.println(h.getName() + "---------------" + h.getValue());
            }
            //读取HTTP响应内容,这里简单打印网页内容
            //读取为字节数组
            byte[] responseBody = getMethod.getResponseBody();
            response = new String(responseBody, charset);
            System.out.println("-----------response:" + response);
            //读取为InputStream,在网页内容数据量大时候推荐使用
            //InputStream response = getMethod.getResponseBodyAsStream();
        } catch (HttpException e) {
            //发生致命的异常,可能是协议不对或者返回的内容有问题
            System.out.println("请检查输入的URL!");
            e.printStackTrace();
        } catch (IOException e) {
            //发生网络异常
            System.out.println("发生网络异常!");
        } finally {
            //6.释放连接
            getMethod.releaseConnection();
        }
        return response;
    }
POST请求
 /**
     * post请求
     * @param url 请求的路径
     * @param  jsonstr请求的信息
     * @return
     */
    public static String doPost(String url, String jsonstr,String token) {
        HttpClient httpClient = new HttpClient();
        PostMethod postMethod = new PostMethod(url);

        postMethod.addRequestHeader("accept", "*/*");
        postMethod.addRequestHeader("connection", "Keep-Alive");
        //设置json格式传送
        postMethod.addRequestHeader("Content-Type", "application/json");
        //必须设置下面这个Header
//        postMethod.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36");
if (!token.equals("")) {
            postMethod.addRequestHeader("Authorization", token);
        }
RequestEntity requestEntity = new StringRequestEntity(jsonstr,"json","UTF-8");
        postMethod.setRequestEntity(requestEntity);
        String res = "";
        try {
            int code = httpClient.executeMethod(postMethod);
            System.out.println(code);
            if (code == 200) {
                res = postMethod.getResponseBodyAsString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return res;
    }

第三步:使用

获得下列接口的数据

http://10.220.4.47:21823/api/UCenter/Login

请求方式post请求

入参
 public class LoginModel
    {
        //用户名
        public string UserName { get; set; }
        //密码
        public string Password { get; set; }
        //系统ID
        public string APPID { get; set; }

返回值类型
略。。。。。。。。。。。
根据对应的返回值类型创建实体类

创建入参实体类

@Data
public class LoginModel {
    @JsonProperty("UserName")     //保持和入参类型一致
    private String UserName;           //保持和传值一致(前端的传值)
    @JsonProperty("Password")
    private String Password;
    @JsonProperty("AppId")
    private String appId;
    @JsonProperty("UserId")
    private String userId;
}

实现接口

String Login(LoginModel model);

实现方法:

public String Login(LoginModel model) {
        try {
           //请求路径
            String loginUrl = "http://10.220.4.47:21823/api/UCenter/Login"
            String jsonStr = JSONObject.toJSON(model).toString();
            String result = doPost(loginUrl, jsonStr, "");
            if (result == "") {
                return "调用远程登录接口失败"
            } else {
                return result;
            }
        } catch (Exception e) {
            return e.getMessage();
        }
    }

请求接口

@PostMapping("/login")
    public String Logon(@RequestBody LoginModel loginModel) {
        if (loginModel != null) {
            //获得第三方接口传来的数据
            return responseModel = commonService.Login(loginModel);
        } else {
            return "参数为空";
        }
    }
GET请求
public static void createCrowd(String corpid, String corpsecret) {
        // 请求地址
        String tokenUrl = "";
        // 请求参数数组,有几个参数就创建对应大小的数组
        NameValuePair[] nameValuePairs = new NameValuePair[2];
        NameValuePair nameValuePair = new NameValuePair();
        nameValuePair.setName("corpid");    //参数名
        nameValuePair.setValue(corpid);     //参数值
        nameValuePairs[0] = nameValuePair;

        NameValuePair nameValuePair1 = new NameValuePair();
        nameValuePair1.setName("corpsecret");
        nameValuePair1.setValue(corpsecret);
        nameValuePairs[1] = nameValuePair1;

        // 调用get请求方式获取数据
        String result = HttpUtils.doGet(tokenUrl, "utf8", "", nameValuePairs);

        JSONObject jsonObject = JSONObject.parseObject(result);
        //获取 accessToken
        String accessToken = jsonObject.get("access_token").toString();
        System.out.println(accessToken);
}
  • 3
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值