|
@@ -0,0 +1,276 @@
|
|
|
+package com.zskk.control;//package com.java;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import org.apache.commons.codec.digest.DigestUtils;
|
|
|
+
|
|
|
+import java.io.*;
|
|
|
+import java.net.URLEncoder;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 用于模拟HTTP请求中GET/POST方式
|
|
|
+ *
|
|
|
+ * @author java
|
|
|
+ */
|
|
|
+public class HttpTest {
|
|
|
+
|
|
|
+ public final static String url = "http://test99.yunyikang.cn/pacs/zskk/writePatientReport";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 主函数,测试请求
|
|
|
+ *
|
|
|
+ * @param args
|
|
|
+ */
|
|
|
+ public static void main(String[] args) {
|
|
|
+ Map<String, String> data = new HashMap<>(22);
|
|
|
+ //获取data数据
|
|
|
+ getData(data);
|
|
|
+ Map<String, String> params = new HashMap<>(10);
|
|
|
+ //时间戳
|
|
|
+ params.put("timestamp", String.valueOf(getSecondTimestamp(new Date())));
|
|
|
+ //signature
|
|
|
+ params.put("signature", getSign(data, "YgpxjVeIx0yoK6Atz413IAj7hU9dygH4"));
|
|
|
+ //datajson字符串
|
|
|
+ params.put("data", JSON.toJSONString(data));
|
|
|
+ System.out.println(params);
|
|
|
+ String result = sendPost(url, params);
|
|
|
+ System.out.println("===============");
|
|
|
+ System.out.println(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送GET请求
|
|
|
+ *
|
|
|
+ * @param url 目的地址
|
|
|
+ * @param parameters 请求参数,Map类型。
|
|
|
+ * @return 远程响应结果
|
|
|
+ */
|
|
|
+ public static String sendGet(String url, Map<String, String> parameters) {
|
|
|
+ String result = "";
|
|
|
+ BufferedReader in = null;// 读取响应输入流
|
|
|
+ StringBuffer sb = new StringBuffer();// 存储参数
|
|
|
+ String params = "";// 编码之后的参数
|
|
|
+ try {
|
|
|
+ // 编码请求参数
|
|
|
+ if (parameters.size() == 1) {
|
|
|
+ for (String name : parameters.keySet()) {
|
|
|
+ sb.append(name).append("=").append(
|
|
|
+ URLEncoder.encode(parameters.get(name),
|
|
|
+ "UTF-8"));
|
|
|
+ }
|
|
|
+ params = sb.toString();
|
|
|
+ } else {
|
|
|
+ for (String name : parameters.keySet()) {
|
|
|
+ sb.append(name).append("=").append(
|
|
|
+ URLEncoder.encode(parameters.get(name),
|
|
|
+ "UTF-8")).append("&");
|
|
|
+ }
|
|
|
+ String temp_params = sb.toString();
|
|
|
+ params = temp_params.substring(0, temp_params.length() - 1);
|
|
|
+ }
|
|
|
+ String full_url = url + "?" + params;
|
|
|
+ System.out.println(full_url);
|
|
|
+ // 创建URL对象
|
|
|
+ java.net.URL connURL = new java.net.URL(full_url);
|
|
|
+ // 打开URL连接
|
|
|
+ java.net.HttpURLConnection httpConn = (java.net.HttpURLConnection) connURL
|
|
|
+ .openConnection();
|
|
|
+ // 设置通用属性
|
|
|
+ httpConn.setRequestProperty("Accept", "*/*");
|
|
|
+ httpConn.setRequestProperty("Connection", "Keep-Alive");
|
|
|
+ httpConn.setRequestProperty("User-Agent",
|
|
|
+ "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
|
|
|
+ // 建立实际的连接
|
|
|
+ httpConn.connect();
|
|
|
+ // 响应头部获取
|
|
|
+ Map<String, List<String>> headers = httpConn.getHeaderFields();
|
|
|
+ // 遍历所有的响应头字段
|
|
|
+ for (String key : headers.keySet()) {
|
|
|
+ System.out.println(key + "\t:\t" + headers.get(key));
|
|
|
+ }
|
|
|
+ // 定义BufferedReader输入流来读取URL的响应,并设置编码方式
|
|
|
+ in = new BufferedReader(new InputStreamReader(httpConn
|
|
|
+ .getInputStream(), "UTF-8"));
|
|
|
+ String line;
|
|
|
+ // 读取返回的内容
|
|
|
+ while ((line = in.readLine()) != null) {
|
|
|
+ result += line;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ try {
|
|
|
+ if (in != null) {
|
|
|
+ in.close();
|
|
|
+ }
|
|
|
+ } catch (IOException ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送POST请求
|
|
|
+ *
|
|
|
+ * @param url 目的地址
|
|
|
+ * @param parameters 请求参数,Map类型。
|
|
|
+ * @return 远程响应结果
|
|
|
+ */
|
|
|
+ public static String sendPost(String url, Map<String, String> parameters) {
|
|
|
+ String result = "";// 返回的结果
|
|
|
+ BufferedReader in = null;// 读取响应输入流
|
|
|
+ PrintWriter out = null;
|
|
|
+ StringBuffer sb = new StringBuffer();// 处理请求参数
|
|
|
+ String params = "";// 编码之后的参数
|
|
|
+ try {
|
|
|
+ // 编码请求参数
|
|
|
+ if (parameters.size() == 1) {
|
|
|
+ for (String name : parameters.keySet()) {
|
|
|
+ sb.append(name).append("=").append(
|
|
|
+ URLEncoder.encode(parameters.get(name),
|
|
|
+ "UTF-8"));
|
|
|
+ }
|
|
|
+ params = sb.toString();
|
|
|
+ } else {
|
|
|
+ for (String name : parameters.keySet()) {
|
|
|
+ sb.append(name).append("=").append(
|
|
|
+ URLEncoder.encode(parameters.get(name),
|
|
|
+ "UTF-8")).append("&");
|
|
|
+ }
|
|
|
+ String temp_params = sb.toString();
|
|
|
+ params = temp_params.substring(0, temp_params.length() - 1);
|
|
|
+ }
|
|
|
+ // 创建URL对象
|
|
|
+ java.net.URL connURL = new java.net.URL(url);
|
|
|
+ // 打开URL连接
|
|
|
+ java.net.HttpURLConnection httpConn = (java.net.HttpURLConnection) connURL
|
|
|
+ .openConnection();
|
|
|
+ // 设置通用属性
|
|
|
+ httpConn.setRequestProperty("Accept", "*/*");
|
|
|
+ httpConn.setRequestProperty("Connection", "Keep-Alive");
|
|
|
+ httpConn.setRequestProperty("User-Agent",
|
|
|
+ "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
|
|
|
+ // 设置POST方式
|
|
|
+ httpConn.setDoInput(true);
|
|
|
+ httpConn.setDoOutput(true);
|
|
|
+ // 获取HttpURLConnection对象对应的输出流
|
|
|
+ out = new PrintWriter(httpConn.getOutputStream());
|
|
|
+ // 发送请求参数
|
|
|
+ out.write(params);
|
|
|
+ // flush输出流的缓冲
|
|
|
+ out.flush();
|
|
|
+ // 定义BufferedReader输入流来读取URL的响应,设置编码方式
|
|
|
+ in = new BufferedReader(new InputStreamReader(httpConn
|
|
|
+ .getInputStream(), "UTF-8"));
|
|
|
+ String line;
|
|
|
+ // 读取返回的内容
|
|
|
+ while ((line = in.readLine()) != null) {
|
|
|
+ result += line;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ try {
|
|
|
+ if (out != null) {
|
|
|
+ out.close();
|
|
|
+ }
|
|
|
+ if (in != null) {
|
|
|
+ in.close();
|
|
|
+ }
|
|
|
+ } catch (IOException ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static void getData(Map<String, String> data) {
|
|
|
+ data.put("hospital_id", "12");
|
|
|
+ data.put("description", "12");
|
|
|
+ data.put("impression", "没有意见");
|
|
|
+ data.put("exam_id", "12");
|
|
|
+ data.put("patient_id", "12");
|
|
|
+ data.put("patient_name", "没毛病");
|
|
|
+ data.put("patient_sex", "M");
|
|
|
+ data.put("card_num", "21321321");
|
|
|
+ data.put("phone", "21321521521");
|
|
|
+ data.put("birthday", "12");
|
|
|
+ data.put("patient_age", "12");
|
|
|
+ data.put("report_result", "12");
|
|
|
+ data.put("report_datetime", String.valueOf(getSecondTimestamp(new Date())));
|
|
|
+ data.put("report_doctor_id", "12");
|
|
|
+ data.put("report_doctor_name", "的撒旦");
|
|
|
+ data.put("review_datetime", String.valueOf(getSecondTimestamp(new Date())));
|
|
|
+ data.put("review_doctor_id", "12");
|
|
|
+ data.put("review_doctor_nam", "无");
|
|
|
+ data.put("confirm_datetime", String.valueOf(getSecondTimestamp(new Date())));
|
|
|
+ data.put("confirm_doctor_id", "12");
|
|
|
+ data.put("confirm_doctor_name", "的撒旦2");
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * 功能描述:生成signature
|
|
|
+ *
|
|
|
+ * @param: [param, key]
|
|
|
+ * @return: java.lang.String
|
|
|
+ * @auther: zzp
|
|
|
+ * @date: 2019/12/24 15:28
|
|
|
+ */
|
|
|
+ public static String getSign(Map<String, String> param, String key) {
|
|
|
+ return DigestUtils.md5Hex(Ksort(param) + key);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * 功能描述: 对数组的值按key排序,生成url的形式(http_build_query)
|
|
|
+ *
|
|
|
+ * @param: [map]
|
|
|
+ * @return: java.lang.String
|
|
|
+ * @auther: zzp
|
|
|
+ * @date: 2019/12/3 15:29
|
|
|
+ */
|
|
|
+ public static String Ksort(Map<String, String> map) {
|
|
|
+ String sb = "";
|
|
|
+ String[] key = new String[map.size()];
|
|
|
+ int index = 0;
|
|
|
+ for (String k : map.keySet()) {
|
|
|
+ key[index] = k;
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+ Arrays.sort(key);
|
|
|
+ for (String s : key) {
|
|
|
+ sb += s + "=" + map.get(s) + "&";
|
|
|
+ }
|
|
|
+ sb = sb.substring(0, sb.length() - 1);
|
|
|
+ try {
|
|
|
+ sb = URLEncoder.encode(sb, "UTF-8");
|
|
|
+ } catch (UnsupportedEncodingException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }// 使用常见的UTF-8编码
|
|
|
+ return sb.replace("%3D", "=").replace("%26", "&");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * 功能描述: 获取当前时间戳(秒)
|
|
|
+ *
|
|
|
+ * @param: [date]
|
|
|
+ * @return: int
|
|
|
+ * @auther: MACHENOIKE
|
|
|
+ * @date: 2019/12/3 15:26
|
|
|
+ */
|
|
|
+ public static int getSecondTimestamp(Date date) {
|
|
|
+ if (null == date) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ String timestamp = String.valueOf(date.getTime());
|
|
|
+ int length = timestamp.length();
|
|
|
+ if (length > 3) {
|
|
|
+ return Integer.valueOf(timestamp.substring(0, length - 3));
|
|
|
+ } else {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|