抓取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来进行远程调用

    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请求参数

**

图片请看我的博客

**

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

java调用

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

主要演示restTemplate带参数调用

    // 用上面的对象,新增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");

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

发布了19 篇原创文章 · 获赞 5 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/a243293719/article/details/89703508