Java 代碼中如何調用 第三方Api


在代碼中調用第三方API 獲取數據

 

package com.example.demo.utils;

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
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.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 提供調用第三方API 的 get與 post 接口
 * Created by baizhuang on 2019/9/12 11:37.
 */

@Slf4j
public class HttpClient {
    /**
     * 表單格式傳輸
     */
    private static final String FORM_CONTEXT_TYPE ="application/x-www-form-urlencoded";

    /**
     * json 默認的編碼類型
     */
    private static final  String JSON_CONTENT_TYPE = "application/json";

    /**
     * 默認的編碼格式
     */
    private static final String DEFAULT_CHARSET = "UTF-8";

    /**
     * 請求配置對象
     */
    private static RequestConfig requestConfig;

    /**
     *  get 請求,將參數包含在 url 路徑中
     *  url : 路徑
     *  return: json 對象
     */
    public static JSONObject doGet(String url){
        JSONObject jsonObject = null;
        try(CloseableHttpClient client = HttpClients.createDefault();){
            HttpGet request  = new HttpGet(url);
            request.setConfig(requestConfig);
            try(CloseableHttpResponse response = client.execute(request);){
                int statusCode = response.getStatusLine().getStatusCode();
                if(statusCode == HttpStatus.SC_OK){
                    HttpEntity entity = response.getEntity();
                    String responseContent = EntityUtils.toString(entity);
                    jsonObject = JSONObject.parseObject(responseContent);
                }else{
                    log.info("Get請求失敗:{},狀態碼:{}",url,statusCode);
                }
            }
        }catch (IOException e){
            log.info("Get 請求異常:{},狀態碼:{}",url,e.getMessage());
            e.printStackTrace();
        }
        return  jsonObject;
    }


    /**
     * get 請求,將參數以Map 的形式傳入
     * path : 包括 協議、主機、端口、資源路徑
     * param: 請求參數
     *
     * @param
     */
    public static JSONObject doGet(String path,Map<String,String> params){
        List<NameValuePair> queryParans = convertParamsMapToList(params);
        URI uri = null;
        try{
            uri = new URIBuilder()
                    .setPath(path)
                    .setParameters(queryParans)
                    .build();
        }catch (URISyntaxException e){
            e.printStackTrace();
        }
        return doGet(uri.toString());
    }


    /**
     *  將Map<String,String> 類型的請求參數轉換為 List<NameValuePair>
     * @param
     *
     */
    private static List<NameValuePair> convertParamsMapToList(Map<String,String> params){
        List<NameValuePair> queryParams  = new ArrayList<>();
        for(String s : params.keySet()){
            queryParams.add(new BasicNameValuePair(s,params.get(s)));
        }
        return  queryParams;
    }

    /**
     * 將請求拆分開傳入
     *
     * scheme 請求協議
     * host  主機地址
     * port 端口
     * path 路徑
     * params 請求參數
     * @param
     */
    public static JSONObject doGet(String scheme,String host,Integer port,String path,Map<String,String> params){
        List<NameValuePair> queryParams = convertParamsMapToList(params);
        URI uri = null;
        try {
            uri = new URIBuilder().setScheme(scheme)
            .setHost(host)
            .setPort(port)
            .setPath(path)
            .setParameters(queryParams)
            .build();
        }catch (URISyntaxException e){
            e.printStackTrace();
        }
        return  doGet(uri.toString());
    }


    /**
     *  post 請求,請求參數被封裝在 JSONObject
     *  url : 請求地址
     *  jsonParam :請求參數
     *
     */
    public static JSONObject doPost(String url,JSONObject jsonParam){
        return doPost(url,jsonParam,null);
    }

    /**
     * doPost ,以表單提交
     */
    public static JSONObject doPost(String url,String params){
        return  doPost(url,params,FORM_CONTEXT_TYPE,null);
    }

    /**
     * post 請求,請求參數被封裝在 JSONObject 中,可以設置字符編碼
     * url: 請求地址
     * jsonParam : 請求參數
     * charset 字符編碼方法
     */
    public static JSONObject doPost(String url,JSONObject jsonParam,String charset){
       return  doPost(url,jsonParam.toJSONString(),JSON_CONTENT_TYPE,charset);
    }



    public static JSONObject doPost(String url,JSONObject jsonParam,boolean isJsonParam,String charset){
        return  doPost(url,jsonParam.toJSONString(),JSON_CONTENT_TYPE,charset);
    }


    /**
     * post 請求,參數為字符串,可以為 JSON ,可以為普通格式,可以設置字符編碼
     * 如果為 json 格式, isJsonStringParam = true
     * 如果是普通格式: name  =Jack&age =10 ,則 isJsonStringParam = false
     *
     * url : 請求地址
     * stringParam 請求參數字符串
     * isJsonStringParam : 請求是否為 json 格式
     * charset 字符編碼格式
     */
    public static JSONObject doPost(String url,String stringParam,boolean isJsonStringParam,String charset){
        JSONObject jsonResult = null;
        if(isJsonStringParam){
            jsonResult = doPost(url,stringParam,JSON_CONTENT_TYPE,charset);
        }else{
            jsonResult = doPost(url,stringParam,FORM_CONTEXT_TYPE,charset);
        }
        return jsonResult;
    }

    /**
     * Post 請求
     * url: 請求地址
     * requestParam 請求參數,字符串格式
     * contentType 內容編碼格式
     * charset 字符編碼格式
     *
     */
    public static JSONObject doPost(String url,String requestParam,String contentType,String charset){
        charset = charset==null?DEFAULT_CHARSET:charset;
        JSONObject jsonResult = null;
        try(CloseableHttpClient httpClient = HttpClients.createDefault();){
            HttpPost httpPost = new HttpPost(url);
            //構造實體請求
            StringEntity requestEntity = new StringEntity(requestParam,charset);
            requestEntity.setContentEncoding(charset);
            requestEntity.setContentType(contentType);
            httpPost.setEntity(requestEntity);
            httpPost.setConfig(requestConfig);
            try(CloseableHttpResponse response = httpClient.execute(httpPost);){
                int statusCode = response.getStatusLine().getStatusCode();
                if(statusCode  == HttpStatus.SC_OK){
                    HttpEntity responseEntity  = response.getEntity();
                    String responseContent = EntityUtils.toString(responseEntity,charset);
                    jsonResult = JSONObject.parseObject(responseContent);
                }else{
                    log.error("post 請求失敗:{},狀態碼:{}",url,statusCode);
                }
            }
        }catch (IOException e){
            e.printStackTrace();
        }
        return jsonResult;
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM