zoukankan      html  css  js  c++  java
  • 一.HttpClient、JsonPath、JsonObject运用

    HttpClient详细应用请参考官方api文档:http://hc.apache.org/httpcomponents-client-4.5.x/httpclient/apidocs/index.html

    1.使用httpclient进行接口测试,所需jar包如下:httpclient.jar、 httpcore.jar、 commons-logging.jar


     2.使用JSONObject插件处理响应数据
     所需的6个JAR包:json-lib.jar、commons-beanutils.jar、commons-collections.jar、ezmorph.jar、commons-logging.jar、commons-lang.jar

    3.使用正则表达式匹配提取响应数据

     

      1 public class UserApiTest {
      2     private static CloseableHttpClient httpClient = null;
      3     
      4     @BeforeClass
      5     public static void setUp(){
      6         httpClient = HttpClients.createDefault();    //创建httpClient
      7     }
      8     
      9     @AfterClass
     10     public static void terDown() throws IOException{
     11         httpClient.close();    
     12     }
     13    
     14     /*    
     15      * 使用httpclient进行接口测试,所需jar包如下:
     16      *httpclient.jar、 httpcore.jar、 commons-logging.jar
     17      *get请求
     18      **/
     19     @Test
     20     public void userQueryWithRegTest1() throws ClientProtocolException, IOException{
     21         HttpGet request = new HttpGet("url地址");    // 创建请求
     22         //设置请求和连接超时时间,可以不设置
     23         RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(20000).build();
     24         request.setConfig(requestConfig);    //get请求设置请求和传输超时时间
     25         CloseableHttpResponse response = httpClient.execute(request);    //执行请求
     26         String body = EntityUtils.toString(response.getEntity());
     27         response.close();          //释放连接
     28         System.out.println(body);
     29         
     30         //获取响应头信息
     31         Header headers[] = response.getAllHeaders();
     32         for(Header header:headers){
     33             System.out.println(header.getName()+""+header.getValue());
     34         }
     35         
     36         // 打印响应信息
     37         System.out.println(response.getStatusLine().getStatusCode());
     38     }
     39     
     40     /*    
     41      * 使用httpclient进行接口测试,所需jar包如下:
     42      *httpclient.jar、 httpcore.jar、 commons-logging.jar
     43      *get请求
     44      **/
     45     @Test
     46     public void testPost1() throws ClientProtocolException, IOException{
     47         HttpPost request = new HttpPost("http://101.200.167.51:8081/fund-api/expProduct");
     48         //设置post请求参数
     49         List<NameValuePair> foramParams = new ArrayList<NameValuePair>();
     50         foramParams.add(new BasicNameValuePair("name", "新手体验"));
     51         foramParams.add(new BasicNameValuePair("yieldRate", "7"));
     52         foramParams.add(new BasicNameValuePair("extraYieldRate", "2"));
     53         foramParams.add(new BasicNameValuePair("duration", "3"));
     54         foramParams.add(new BasicNameValuePair("minBidAmount", "0"));
     55         foramParams.add(new BasicNameValuePair("maxBidAmount", "10000"));
     56         UrlEncodedFormEntity urlEntity = new UrlEncodedFormEntity(foramParams, "UTF-8");
     57         request.setEntity(urlEntity);  //设置POST请求参数
     58         CloseableHttpResponse response = httpClient.execute(request);    //执行post请求
     59         String body = EntityUtils.toString(response.getEntity());    
     60         response.close();    //释放连接
     61         System.out.println(body);
     62         JSONObject jsonObj = JSONObject.fromObject(body);
     63         System.out.println("是否成功:"+jsonObj.getString("msg").equals("成功"));
     64     }
     65 
     66     /*
     67      * 用正则表达式提取响应数据
     68      * */
     69     @Test
     70     public void userQueryWithRegTest2() throws ClientProtocolException, IOException{
     71         HttpGet request = new HttpGet("url地址"); // 创建请求
     72         CloseableHttpResponse response = httpClient.execute(request);    // 执行某个请求
     73         String body = EntityUtils.toString(response.getEntity());    // 得到响应内容
     74         response.close();
     75         System.out.println(body);
     76 
     77         // "nickname":"([a-zA-Z0-9]*)"
     78         Pattern pattern = Pattern.compile(""mobile":"(\d+)","nickname":"([a-zA-Z0-9]*)".*"status":(\d)"); // 从正则表达式得到一个模式对象
     79         Matcher matcher = pattern.matcher(body);// 对响应内容进行匹配
     80         while (matcher.find()) {
     81             String group0 = matcher.group(0); // **_g0
     82             String group1 = matcher.group(1); // **_g1
     83             String group2 = matcher.group(2); // **_g1
     84             String group3 = matcher.group(3); // **_g1
     85             System.out.println(group0 + "	" + group1 + "	" + group2 + "	" + group3);
     86         }
     87 
     88     }
     89     
     90     /*
     91      * 使用JsonPath提取json响应数据中的数据
     92      * 需要的jar包:json-path-2.2.0.jar
     93      */
     94     @Test
     95     public void userQueryWithRegTest3() throws ClientProtocolException, IOException{
     96         HttpGet request = new HttpGet("url地址"); // 创建请求
     97         CloseableHttpResponse response = httpClient.execute(request);    // 执行某个请求
     98         String body = EntityUtils.toString(response.getEntity());    // 得到响应内容
     99         response.close();
    100         System.out.println(body);
    101 
    102         ReadContext ctx = JsonPath.parse(body);
    103         String  mobile = ctx.read("$.data.mobile");
    104         String  nickname = ctx.read("$.data.nickname");
    105         int status = ctx.read("$.data.status");
    106         String avatar = ctx.read("$.data.avatar");
    107         System.out.println(mobile + "	" + nickname + "	" + status + "	" + avatar);
    108     }
    109     
    110         
    111     
    112         /*
    113          * 使用JSONObject插件处理响应数据
    114          * 所需的6个JAR包:json-lib.jar、commons-beanutils.jar、commons-collections.jar、ezmorph.jar、commons-logging.jar、commons-lang.jar
    115          */
    116     @Test
    117     public void userQueryWithRegTest5() throws ClientProtocolException, IOException{
    118         HttpGet request = new HttpGet("url地址"); // 创建请求
    119         CloseableHttpResponse response = httpClient.execute(request);    // 执行某个请求
    120         String body = EntityUtils.toString(response.getEntity());    // 得到响应内容
    121         response.close();
    122         
    123         //将响应的字符串转换为JSONObject对象
    124         JSONObject jsonObj = JSONObject.fromObject(body);
    125         System.out.println(jsonObj.getString("code").equals("200"));
    126         //data是对象中的一个对象,使用getJSONObject()获取
    127         JSONObject jsonObj1 = jsonObj.getJSONObject("data");
    128         System.out.println("status:"+jsonObj1.getInt("status")+"
    "+"nickname:"+jsonObj1.getString("nickname"));
    129     }
    130     
    131     
    132     
    133     /*
    134      * java代码转换json
    135      * 需要的jar包:json-lib
    136      * */
    137     @Test
    138     public void testJavaToJson(){
    139         System.out.println("--------------------------------------------------------------");
    140         System.out.println("java代码封装为json字符串:");
    141         JSONObject jsonObj = new JSONObject();
    142         jsonObj.put("username", "张三");
    143         jsonObj.put("password", "123456");
    144         System.out.println("java--->json: "+jsonObj.toString());
    145         System.out.println("--------------------------------------------------------------");
    146     }
    147     
    148     /*
    149      * json字符串转xml字符串
    150      * 需要的jar包:json-lib;xom
    151      * */
    152     @Test
    153     public void testJsonToXml(){
    154         System.out.println("--------------------------------------------------------------");
    155         System.out.println("json转xml字符串");
    156         String jsonStr = "{"username":"张三","password":"123456"}";
    157         JSONObject jsonObj = JSONObject.fromObject(jsonStr);
    158         XMLSerializer xmlSerializer = new XMLSerializer();
    159         // 设置根元素名称
    160         xmlSerializer.setRootName("user_info");
    161         // 设置类型提示,即是否为元素添加类型 type = "string"
    162         xmlSerializer.setTypeHintsEnabled(false);
    163         String xml = xmlSerializer.write(jsonObj);
    164         System.out.println("json--->xml: "+xml);
    165         System.out.println("--------------------------------------------------------------");
    166     }
    167     
    168     /*
    169      * xml字符串转json字符串
    170      * 需要的jar包:json-lib;xom
    171      * */
    172     @Test
    173     public void testXmlToJson(){
    174         System.out.println("--------------------------------------------------------------");
    175         System.out.println("xml字符串转json字符串");
    176         String xml = "<?xml version="1.0" encoding="UTF-8"?><user_info><password>123456</password><username>张三</username></user_info>";
    177         XMLSerializer xmlSerializer = new XMLSerializer();
    178         JSON json= xmlSerializer.read(xml);    //JSON是JSONObject的String形式
    179         System.out.println("xml---->json:"+json);
    180         System.out.println("--------------------------------------------------------------");
    181     }
    182     
    183     /*
    184      * javaBean转json
    185      * 需要的jar包:json-lib
    186      * */
    187     @Test
    188     public void testJavaBeanToJson(){
    189         System.out.println("--------------------------------------------------------------");
    190         System.out.println("javaBean转json");
    191         UserInfo userInfo = new UserInfo();
    192         userInfo.setUsername("张三");
    193         userInfo.setPassword("123456");
    194         JSONObject JsonObj = JSONObject.fromObject(userInfo);
    195         System.out.println("javaBean--->json:"+JsonObj.toString());
    196         System.out.println("--------------------------------------------------------------");
    197     }
    198     
    199     /*
    200      * javaBean转xml
    201      * 需要的jar包:json-lib;xom
    202      * */
    203     @Test
    204     public void testJavaBeanToXml(){
    205         System.out.println("--------------------------------------------------------------");
    206         System.out.println("javaBean转xml");
    207         UserInfo userInfo = new UserInfo();
    208         userInfo.setUsername("张三");
    209         userInfo.setPassword("123456");
    210         JSONObject JsonObj = JSONObject.fromObject(userInfo);
    211         XMLSerializer xmlSerializer = new XMLSerializer();
    212         xmlSerializer.setRootName("user_info");
    213         String xml = xmlSerializer.write(JsonObj, "UTF-8");
    214         System.out.println("javaBeanToXml--->xml:"+xml);
    215         System.out.println("--------------------------------------------------------------");
    216     }
    217 }

    补充:

       /*    
         *使用 java.net.URL.URL请求
         * */
        @Test
        public void useJavaUrl(){
            String httpUrl = "http://apis.baidu.com/showapi_open_bus/mobile/find";
            String httpArg = "num=13901452908";
            BufferedReader reader = null;
            String result = null;
            StringBuffer sbf = new StringBuffer();
            httpUrl = httpUrl + "?" + httpArg;
    
            try {
                URL url = new URL(httpUrl);
                HttpURLConnection connection = (HttpURLConnection) url
                        .openConnection();
                connection.setRequestMethod("GET");
                // 填入apikey到HTTP header
                connection.setRequestProperty("apikey",  "f584d68b4aebca91c154bffd397e05cd");
                connection.connect();
                InputStream is = connection.getInputStream();
                reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                String strRead = null;
                while ((strRead = reader.readLine()) != null) {
                    sbf.append(strRead);
                    sbf.append("
    ");
                }
                reader.close();
                result = sbf.toString();
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println(result);
        }

    UserInfo:

    public class UserInfo {
        public String username;
        public String password;
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        
    }
  • 相关阅读:
    postgresql数据迁移
    编译安装或者mysql启动时遇到的错误小记
    安装数据库时提示重启删除 以下注册信息则不用重启
    ​sql2008安装提示报错,.必须使用"角色管理工具"安装或配置Microsoft.net.framework 3.5 sp1
    windows10 安装jdk13.0.1 与 apache-jmeter-5.1.1
    Axure RP 9 获取验证码发送倒计时
    PHP 重定向跳转页面使用post传参
    用 PHPExcel 导入excel表格并展示到前台
    当失去焦点时 验证时分秒 并提示
    iptables 防止syn ddos ping攻击
  • 原文地址:https://www.cnblogs.com/gongjian/p/6095669.html
Copyright © 2011-2022 走看看