现在根据项目的需要,已经转战服务端的测试,就先从最简单的发送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" }] }
我们在下一个教程中,讲解如何解析响应的数据……