收到 Issues , 库中的代码不能使用了,看起来是接口的协议更新后使用了protobuf。
控制台抓包, 看起来比较符合的接口 https://s.wanfangdata.com.cn/SearchService.SearchService/search?
习惯性通过 Initiator 进入断点。
刷新页面
查看各部分参数。
控制台上打印一下 ,这个就是请求参数。
再继续找。
这里的e是返回的数据。
找到请求信息和返回信息后,可以按照对应格式构建一个protobuf文件。
protobuf消息传输协议在app逆向时经常遇到,就不多具体介绍了。
已知请求参数
params = { 'searchtype': "paper", 'searchWord': 'lxlx', 'currentPage': '1', 'pageSize': '20', 'searchFilter': [0], 'searchScope': '0', 'searchSort': 'null', }
那么pro文件:
syntax = "proto3"; message SearchService { message CommonRequest { string searchType = 1; string searchWord = 2; int32 currentPage = 3; int32 pageSize = 4; SearchScope searchScope = 5; repeated SearchFilter searchFilter = 6; } message SearchRequest { CommonRequest commonrequest = 1; } }
然后用protoc 编译成py文件。
.\protoc.exe --python_out=. ./s.proto
编译后的文件时 s_pb2.py
调用下看看
import s_pb2 as pb search_request = pb.SearchService.SearchRequest() search_request.commonrequest.searchType = "paper" search_request.commonrequest.searchWord = 'lxlx' search_request.commonrequest.searchScope = 0 search_request.commonrequest.currentPage = 1 search_request.commonrequest.pageSize = 20 search_request.commonrequest.searchFilter.append(0) bytes_body = search_request.SerializeToString() print(bytes_body)
输出:
和浏览器的参数基本一致,
下面可以用代码测试请求,经过测试可以成功返回数据。
关于如何解析返回的protobuf数据:
逻辑是一样的,按照上面js拦截到的返回格式,构建一个pro文件,然后编译成py文件调用。
返回的内容很多,太麻烦,就不再写了。