import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.InputStreamEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class HttpClientTest {
    // 使用Excel数据驱动取数据
    @DataProvider(name = "datapro")
    public Iterator<Object[]> Data() {
        return new ExcelDataProvider("SoapTest", "testSoap");
    }

@Test(dataProvider = "datapro")
    public void httpPost(Map<String, String> data) throws IOException {
        // 对传输数据进行加密,这里使用SHA-1算法加密
        SoapKey soapKey = new SoapKey();
        String key = soapKey.getMessageDigest(data.get("data"), "SHA-1");
        // 将请求XML主体数据的"<"与">"替换成"&lt;"与"&gt;"
        String strData = new String(data.get("data").replace("<", "&lt;")).replace(">", "&gt;");
        // 请求的XML数据,即请求体
        String soapReuqest = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://service.ws.gpo.yy.com/\">"
                + "<soapenv:Header/>" + "<soapenv:Body><ser:sendRecv4Supplier><!--Optional:--><sUser>"
                + data.get("user") + "</sUser><!--Optional:--><sPwd>" + data.get("passwd")
                + "</sPwd><!--Optional:--><sJgbm>" + data.get("jgbm")
                + "</sJgbm><!--Optional:--><sVersion>1.0.0.0</sVersion><!--Optional:--><sXxlx>" + data.get("msgType")
                + "</sXxlx><!--Optional:--><sSign>" + key + "</sSign><!--Optional:-->" + "<xmlData>" + strData
                + "</xmlData>" + "</ser:sendRecv4Supplier></soapenv:Body></soapenv:Envelope>";
        // 1.创建httpClient客户端
        CloseableHttpClient httpclient = HttpClients.createDefault();

// 2.获取http post
        HttpPost httppost = new HttpPost(data.get("urlStr"));
        // 3.设置发送请求的字符集编码
        httppost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=" + "utf-8");
        /*
         * // 4.把SOAP请求数据添加到http post方法中,此方式也可实现,处理方式可能有点绕
        byte[] by = soapReuqest.getBytes("utf-8");
        InputStream inputStream = new ByteArrayInputStream(by, 0, by.length);
        //实例化输入流请求实体:使用HttpClient测试Soap接口比较特殊;服务端可能是以IO流的形式接收数据的,此处先作此定论,后续再做研究
        InputStreamEntity reqEntity = new InputStreamEntity(inputStream,by.length);
        */
        //设置http请求实体,将请求的String数据转换成StringEntity实体,一定要指定字符集编码
        StringEntity reqEntity = new StringEntity(soapReuqest,"utf-8");
        httppost.setEntity(reqEntity);
        
        // 5.执行http post请求
        HttpResponse response = httpclient.execute(httppost);
        // 6.获取服务端返回的状态码
        int statuscode = response.getStatusLine().getStatusCode();
        // 7.获取服务器的返回实体
        HttpEntity entity = response.getEntity();
        String responseMsg = EntityUtils.toString(entity);
        System.out.println("接口:" + data.get("msgType") + ":返回的状态码与响应结果:" + statuscode + ":" + responseMsg);
    }
}

使用HttpClient工具类测试WebService接口(soap)的更多相关文章

  1. 使用HttpClient工具类测试Http接口

    一.httpClient模拟客户端 import java.util.ArrayList;import java.util.Iterator;import java.util.List;import ...

  2. 【SoapUI、Postman、WebServiceStudio、Jmeter】接口测试工具结合测试webservice接口(发送XML格式参数)

    目录: SoapUI测试webservice接口,发送XML格式参数 Postman测试webservice接口,发送XML格式参数 WebServiceStudio.exe测试webservice接 ...

  3. 使用URL工具类调用webservice接口(soap)与http接口的实现方式

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  4. 通过Httpclient工具类,实现接口请求

    package luckyweb.seagull.util; import org.apache.http.NameValuePair; import org.apache.http.client.e ...

  5. python实现建立soap通信(调用及测试webservice接口)

    实现代码如下: #调用及测试webservice接口 import requests class SoapConnect: def get_soap(self,url,data): r = reque ...

  6. 『动善时』JMeter基础 — 50、使用JMeter测试WebService接口

    目录 1.什么是WebService 2.WebService和SOAP的关系 3.什么是WSDL 4.测试WebService接口前的准备 (1)如何判断是WebService接口 (2)如何获取W ...

  7. 『动善时』JMeter基础 — 51、使用JMeter测试WebService接口

    目录 1.什么是WebService 2.WebService和SOAP的关系 3.什么是WSDL 4.测试WebService接口前的准备 (1)如何判断是WebService接口 (2)如何获取W ...

  8. Python之测试webservice接口

    前段时间学习了Python操作http接口,觉得挺容易的.最近项目组也有接触webservice接口,心里想想是否Python也可以操作这类接口.于是利用伟大的度娘,花了6个小时研究出来了,所以迫不及 ...

  9. Java开发小技巧(五):HttpClient工具类

    前言 大多数Java应用程序都会通过HTTP协议来调用接口访问各种网络资源,JDK也提供了相应的HTTP工具包,但是使用起来不够方便灵活,所以我们可以利用Apache的HttpClient来封装一个具 ...

随机推荐

  1. ActiveMQ in Action(7) - Wildcards

    关键字: activemq 2.6.7 Wildcards    Wildcards用来支持联合的名字分层体系(federated name hierarchies).它不是JMS规范的一部分,而是A ...

  2. 面试题-Java基础-集合和数组

    1.Java集合类框架的基本接口有哪些? 集合类接口指定了一组叫做元素的对象.集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序.有的集合类允许重复的键,有些不允许.Java集 ...

  3. Intelli IDEA 使用教程

    1.怎样修改字体 File-Settings-color&Fonts-Fonts

  4. Hive 常用函数

    参考地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 1. parse_url(url, partToExt ...

  5. 实战荟萃-UI篇

    一. 前言 平时在处理问题的时候,经常会遇到一些奇奇怪怪的问题,今天在这里将其记录下来.这里将会列举几个常用的UI问题进行讲解 二. 导航栏 iOS导航栏绝对是个巨坑.和很多朋友聊天都是自己实现了一套 ...

  6. MyBatis 异常 集锦

    异常1.使用映射器 (还没有使用Spring) 异常信息摘要: org.apache.ibatis.binding.BindingException: Type interface com.jege. ...

  7. 第九十三节,html5+css3移动手机端流体布局,基础CSS,头部设计,轮播设计,底部设计

    html5+css3移动手机端流体布局,基础CSS,头部设计,轮播设计,底部设计 基础CSS 首先将通用css属性写好 @charset "utf-8"; /*通用样式*/ /*去 ...

  8. 草料生成app自动下载的二维码

    草料官网http://cli.im/app 填写iOS和安卓的appid就好了

  9. js常见的判断移动端或者pc端或者安卓和苹果浏览器的方法总结

    1.js常见的判断移动端或者pc端或者安卓和苹果浏览器的方法总结 : http://www.haorooms.com/post/js_pc_iosandmobile 2.Js判断客户端是否为PC还是手 ...

  10. Spring Security(06)——AuthenticationProvider

    目录 1.1     用户信息从数据库获取 1.1.1    使用jdbc-user-service获取 1.1.2    直接使用JdbcDaoImpl 1.2     PasswordEncode ...