HttpsUtils.java 5.4 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://123.56.159.203:8023/mtfmset/allWMadd";
//        try {
//
//            String url = "http://123.56.159.203:8023/nowwmrd/getSelectNowwmrdbyProjectID";
//            Map<String, Object> datas = new HashMap<>();
//            datas.put("ProjectID", "33-99-00-00-00-00-01");
//            List list = new ArrayList<>();
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
}