抓取app数据保存到数据库

抓包工具:Charles
推荐一个IOS抓包APP: Stream

Charles入门教程

先根据教程设置:
1.手机链接Charles
2.PC需安装证书,手机需信任(IOS-12到设置-通用-关于本机-证书信任设置),否则无法抓取HTTPS请求
3.手机WIFI配置HTTP代理

抓取请求

打开APP,刷新列表

找到发送的请求,可以看到请求方式GET、请求路径、参数、请求头,以及返回的数据等信息

使用Postman调用(GET)

其中请求头中的token、appversion必传

token: 用户登录验证
appversion: 版本如果不传,返回的数据可能会少
Content-Type: GET请求可以不传,POST必须传

使用java代码调用并保存到数据库

使用RestTemplate来进行远程调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
RestTemplate restTemplate = new RestTemplate();

// 请求头
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("token", "858714e6-9166-4a42-a0e9-71d4ebc293f6");
httpHeaders.add("appVersion", " 5.2.3");

HttpEntity<String> httpEntity = new HttpEntity<>(null, httpHeaders);

// 远程调用接口-GET
ResponseEntity<String> exchange = restTemplate
.exchange(
"URL",
HttpMethod.GET,
httpEntity, String.class);
// 返回结果
String body = exchange.getBody();

最后处理字符串,取需要的数据保存即可

多层调用(POST)

其实列表的数据并不全,比如要获取姓名、手机号等信息

那么就需要根据列表返回的参数(比如userId),再调接口获取信息

获取手机号,再次抓包,可以看到请求方式为POST了,请求路径为/call/593120

多抓几次联系方式的包,可以知道路径后面的数字即为userId

点击下面的Text可以获取到POST请求参数

1
2
3
4
{
"from_id": 15293300, // 多抓几次,判断为业务ID
"from_type": 1 // 写死的
}

java调用

Postman调用设置请求头和参数就行

主要演示restTemplate带参数调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 用上面的对象,新增Content-Type即可
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
// 设置请求参数
String requestJson = "{\"from_type\":1,\"from_id\":" + map.get("id") + "}";

HttpEntity<String> entity = new HttpEntity<>(requestJson, httpHeaders);

// 远程调用-POST
ResponseEntity<String> getUserTel = restTemplate
.exchange("https://user-api.xxxx.com/call/" + userId,
HttpMethod.POST,
entity, String.class);

// 根据返回结果格式转换
String userTelBody = getUserTel.getBody();
Map userTelMap = JSONUtil.toBean(userTelBody, Map.class);
Map userTelDataMap = JSONUtil.toBean((JSONObject) userTelMap.get("data"), Map.class);

// 货主联系方式
String userTel = (String) userTelDataMap.get("mobile");

以上就是一个简单的抓包逻辑

结语

有些APP的请求参数和返回结果都是乱码

1.加密了,要脱壳
2.需要证书

------本文结束感谢阅读------
0%