HttpsUtils.java 7.5 KB
package utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.sunyo.energy.location.model.WaterMeter;
import jdk.nashorn.internal.parser.JSONParser;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class HttpsUtils {

    /**
     * java调用运程api公共方法
     *
     * @param requestUrl
     * @param params
     * @return
     */
    @SuppressWarnings({"unchecked", "rawtypes"})
    public static String httpRequest(String requestUrl, Map params) throws Exception {
        // buffer用于接受返回的字符
        StringBuffer buffer = new StringBuffer();

        // 建立URL,把请求地址给补全,其中urlencode()方法用于把params里的参数给取出来
        URL url = new URL(requestUrl + "?" + urlencode(params));
        // 打开http连接
        HttpURLConnection httpUrlConn = (HttpURLConnection) url
                .openConnection();
        httpUrlConn.setDoInput(true);
        httpUrlConn.setRequestMethod("GET");
        httpUrlConn.connect();

        // 获得输入
        InputStream inputStream = httpUrlConn.getInputStream();
        InputStreamReader inputStreamReader = new InputStreamReader(
                inputStream, "utf-8");
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

        // 将bufferReader的值给放到buffer里
        String str = null;
        while ((str = bufferedReader.readLine()) != null) {
            buffer.append(str);
        }
        // 关闭bufferReader和输入流
        bufferedReader.close();
        inputStreamReader.close();
        inputStream.close();
        inputStream = null;
        // 断开连接
        httpUrlConn.disconnect();

        // 返回字符串
        return buffer.toString();
    }

    /**
     * 请求参数拼接(组装)
     *
     * @param data
     * @return
     */
    @SuppressWarnings("rawtypes")
    public static String urlencode(Map<String, Object> data) {
        // 将map里的参数变成像 showapi_appid=###&showapi_sign=###&的样子
        StringBuilder sb = new StringBuilder();
        for (Map.Entry i : data.entrySet()) {
            try {
                sb.append(i.getKey()).append("=")
                        .append(URLEncoder.encode(i.getValue() + "", "UTF-8"))
                        .append("&");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }

    /**
     * 向指定 URL 发送POST方法的请求
     *
     * @param url   发送请求的 URL
     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return 所代表远程资源的响应结果
     */
    public static String sendPostHttpRequest(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 1.获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 2.中文有乱码的需要将PrintWriter改为如下
            // out=new OutputStreamWriter(conn.getOutputStream(),"UTF-8")
            // 发送请求参数
            out.print(param);
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常!" + e);
            e.printStackTrace();
        }
        // 使用finally块来关闭输出流、输入流
        finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }

    // 测试是否有效
//    public static void main(String[] args) {
//        // 接口地址
//        String requestUrl = "http://localhost:8080/manifest/f5f5669bbdecefd3dacfaba194647c35";
//        try {
//
//            Map<String, Object> datas = new HashMap<>();
//            datas.put("de_size", "dcdf38d9a5d6411985e49155481882f5");
//            datas.put("waybillnomaster", "66611111111");
//            datas.put("de_type", "001");
//            datas.put("delivery_station", "001");
//            datas.put("flightno", "CA9999");
//            datas.put("flightdate", "2019-9-21 00:00:00");
//            datas.put("originatingstation", "CGO");
//            datas.put("destinationstation", "CGO");
//            datas.put("totalpiece", "19");
//            datas.put("totalweight", "19");
//            datas.put("paymode", "PP");
//            datas.put("customsstatus", "001");
//            datas.put("customscode", "4604");
//            datas.put("productname", "SHOUJI");
//            datas.put("co_company", "测试");
//            datas.put("co_address", "测试");
//            datas.put("co_telephone", "00000000");
//            datas.put("co_country", "CN");
//            datas.put("sh_company", "测试");
//            datas.put("sh_address", "测试");
//            datas.put("sh_country", "CN");
//            datas.put("sh_telephone", "0000000");
//            datas.put("sh_city", "测试");
//            datas.put("USER_ID", "1");
//            datas.put("reach_station", "CGO");
//            datas.put("de_volume", "000100003_MMM");
//            datas.put("de_trstation", "APL,111");
//
//            String param ="waybillnomaster=666-11111111&de_volume=66611111111_MMM&de_type=001&delivery_station=001&flightno=CV9765&flightdate=2019-12-20&originatingstation=CGO&destinationstation=ORD&totalpiece=1&totalweight=136.00&paymode=PP&customsstatus=001&customscode=4604&productname=CONSOL&co_company=DSV+AIR+%26+SEA+CO.%2c+LTD&co_address=8%269F%2c+RAFFLES+CITY+CHANGNING+OFFI.+TOWER+3%2c+NO.+1193+CHANGNING+RDSHANG&co_zipcode=200051&shpcusid=&shpaeo=&co_telephone=%2b86+21+33259800&co_country=CN&sh_company=ORD-DSV+AIR++SEA+INC&sh_address=1300+N+ARLINGTON+HEIGHTS+ROAD+SUITE+US&sh_zipcode=60143&cnecusid=&cneaeo=&sh_country=US&sh_telephone=8479568855&sh_fax=&sh_city=CHICAGO&USER_ID=1640&reach_station=ORD&de_trstation=BDX%2c111&de_packing=BDX%2c222&de_remarks=BDX%2c333&de_size=dcdf38d9a5d6411985e49155481882f5";
//            String ss = HttpsUtils.sendPostHttpRequest(requestUrl, param);
//            JSONArray jsonArray = JSON.parseArray(ss);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
}