zoukankan      html  css  js  c++  java
  • 使用HttpClient工具类测试Http接口

    一、httpClient模拟客户端

    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    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 org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;

    public class GpoHttpClientServiceImpl {
        @DataProvider(name = "datapro")
        public Iterator<Object[]> datapro() {
            return new ExcelDataProvider("hospitalInv", "invokeGpoHttpServer");
        }

        @Test(dataProvider = "datapro")
        public void invokeGpoHttpServer(Map<String, String> data) throws Exception {

            // 创建http post请求
            HttpPost httppost = new HttpPost(data.get("httpUrl"));

            // 将请求的xml格式的字符串进行压缩
            String zipReqxml = ZipUtil.zipBase64String(data.get("reqXml"));
            // 将请求的xml业务数据与接口密钥一起使用MD5加密,指定字符集为UTF-8
            String sign = MD5Util.sign(data.get("reqXml"), data.get("mscpKey"), "utf-8");
            // 将服务端所需要的参数以BasicNameValuePair键值对的方式进行封装,并添加到一个NameValuePair类型的list中,作为传送的容器,list中的每个元素都是一个键值对
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("mscpCode", data.get("mscpCode")));
            params.add(new BasicNameValuePair("sign", sign));
            params.add(new BasicNameValuePair("reqXml", zipReqxml));
            // 设置http请求实体,http接口服务端接收数据的格式为NameValuePair类型的list实体
            httppost.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
            // 创建http客户端
            CloseableHttpClient httpclient = HttpClients.createDefault();
            // 发送http post请求
            HttpResponse response = httpclient.execute(httppost);
            // 获取服务端返回的httpCode
            int httpCode = response.getStatusLine().getStatusCode();
            // 将服务端返回的结果实体转换成字符串
            String result = EntityUtils.toString(response.getEntity());
            System.out.println("HttpCode:" + httpCode + "   服务器返回结果:" + result);
        }

    }

    二、MD5接口数据加密

    import java.io.UnsupportedEncodingException;
    import java.security.SignatureException;
    import org.apache.commons.codec.digest.DigestUtils;

    public class MD5Util {

        /**
         * 签名字符串
         *
         * @param text
         *            需要签名的字符串
         * @param key
         *            密钥
         * @param input_charset
         *            编码格式
         * @return 签名结果
         */
        public static String sign(String text, String key, String input_charset) {
            text = text + key;
            return DigestUtils.md5Hex(getContentBytes(text, input_charset));
        }

        /**
         * @param content
         * @param charset
         * @return
         * @throws SignatureException
         * @throws UnsupportedEncodingException
         */
        private static byte[] getContentBytes(String content, String charset) {
            if (charset == null || "".equals(charset)) {
                return content.getBytes();
            }

            try {
                return content.getBytes(charset);
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException("MD5签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:" + charset);
            }
        }
    }

    三、对传输的数据进行压缩

    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;
    import java.util.zip.ZipOutputStream;

    import org.apache.commons.codec.binary.Base64;

    public class ZipUtil {

        /**
         * 使用zip进行压缩
         *
         * @param str
         *            压缩前的文本
         * @return 返回压缩后的文本
         */
        public static final String zipBase64String(String str) {
            if (str == null)
                return null;
            byte[] compressed;
            ByteArrayOutputStream out = null;
            ZipOutputStream zout = null;
            String compressedStr = null;
            try {
                out = new ByteArrayOutputStream();
                zout = new ZipOutputStream(out);
                zout.putNextEntry(new ZipEntry("zip"));
                zout.write(str.getBytes("utf-8"));
                zout.closeEntry();
                compressed = out.toByteArray();

                compressedStr = Base64.encodeBase64String(compressed);
            } catch (IOException e) {
                e.printStackTrace();
                compressed = null;
            } finally {
                if (zout != null) {
                    try {
                        zout.close();
                    } catch (IOException e) {
                    }
                }
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                    }
                }
            }
            return compressedStr;
        }

        /**
         * 使用zip进行解压缩
         *
         * @param compressed
         *            Base64转码的压缩文本
         * @return 解压后的字符串
         */
        public static String unzipBase642String(String base64CompressedStr) {
            if (base64CompressedStr == null) {
                return null;
            }

            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ByteArrayInputStream in = null;
            ZipInputStream ginzip = null;
            String decompressed = null;
            try {
                byte[] compressed = Base64.decodeBase64(base64CompressedStr);
                in = new ByteArrayInputStream(compressed);
                ginzip = new ZipInputStream(in);
                ginzip.getNextEntry();

                byte[] buffer = new byte[1024];
                int offset = -1;
                while ((offset = ginzip.read(buffer)) != -1) {
                    out.write(buffer, 0, offset);
                }
                decompressed = out.toString("utf-8");
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                    }
                }
                if (ginzip != null) {
                    try {
                        ginzip.close();
                    } catch (IOException e) {
                    }
                }
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                    }
                }
            }

            return decompressed;
        }

    }

  • 相关阅读:
    车羊问题的一种简洁证明
    linux document viewer 中文乱码、方块
    java编程方式生成CA证书
    First JNI
    opensuse 上面运行eclipse崩溃的问题
    java在非安全网络上建立可信任安全的通道(2/3)
    java在非安全网络上建立可信任安全的通道(1/3)
    java编程方式用CA给证书进行签名/签发证书
    泛型类里面获取到泛型的类型
    安全领域的一些概念
  • 原文地址:https://www.cnblogs.com/zw520ly/p/5893662.html
Copyright © 2011-2022 走看看