使用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;
    }

}

原文地址:https://www.cnblogs.com/zw520ly/p/5893662.html