【接口测试】:HttpURLConnection 发送post请求

时间:2022-11-07 20:31:52

现在根据项目的需要,已经转战服务端的测试,就先从最简单的发送post请求,获取响应数据,对json串解析

需求:
1、模拟不同国家的客户端,去请求对应国家的任务
2、模拟不同的国家IP、模拟参数
3、Post发送

post的方法类,代码如下:

public class HttpRequest {
    /** * * @param url 请求的url地址 * @param params 发送的参数 * @param countryCode 国家 * @return */
     public static String sendPost(String url, String params, String countryCode ) {
         PrintWriter out = null;
         BufferedReader in = null;
         String result = "";
         try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
            // 设置通用的请求属性
            //61.0.50.0 印度 IN 、180.214.235.255 印度尼西亚 ID
            String IN = "61.0.50.0";
            String ID = "180.214.235.255";
            String US = "8.8.8.8";
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            switch(countryCode){
            case "IN" : 
                conn.setRequestProperty("X-Forwarded-For", IN);
                break;
            case "ID":
                conn.setRequestProperty("X-Forwarded-For", ID);
                break;
            case "US":
                conn.setRequestProperty("X-Forwarded-For", US);
                break;
            default:
                Out.println("没有匹配到国家");
                break;
            }
            conn.setRequestMethod("POST");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            out.print(params);
            // flush输出流的缓冲
            out.flush();
            int code = conn.getResponseCode();
            String codeInfo = conn.getResponseMessage();
            if(code == 200){
                System.out.println("响应code码 : " + code );
                // 定义BufferedReader输入流来读取URL的响应
                in = new BufferedReader(
                        new InputStreamReader(conn.getInputStream()));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line + "\n";
                }
            }else{
                 System.out.println("响应code码: " + code + " !");

            }
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常!"+e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
        }
        return result;
    } 

}

调用的代码如下:

String countryCode  = "IN";
String url = "http://10.200.10.220/dc/v1/ts";   
String aid = "zwf0425";
//根据项目的需要,拼接字符串,是post中需要发送的参数,有的时候参数是需要进行加密的
String mingWen = "{\"platform\":\"android\",\"app_version\":\"2.0\",\"app_name\":\"com.monet.boost.max.am\",\"aid\":\""+ aid +"\",\"sdk_version\":\"1.3\"}";
//对明文进行加密变成密文,防止恶意篡改数据,这个加密的方法是我们开发自己写的方法
String miWen = DataEn.encrypt(mingWen);
//response 就是接口post请求返回来的数据
String responseBody = HttpRequest.sendPost(url, miWen, countryCode);

接口响应的数据也是经过加密的,首先我们需要解密,json格式的数据如下:

{
    "trackdata": [],
    "clickdata": [{ "offer_id": "13141772", "click": "http://pixel.webeyemob.com/v1/ad/click?subsite_id=30222&transaction_id=&id=16600&offer_id=13141772&geo=IN&aid=baeb05b7e19be667&client_version=&gaid=13414e1d-9e57-4b17-935f-dcbfa9935535&tmark=1493112601846&p=&app_name=com.monet.boost.max.am&sdk_version=1.3&app_version=2.0", "appid": "com.monet.boost.max.am", "dataid": "100001020010224181493112705714" }] }

我们在下一个教程中,讲解如何解析响应的数据……