万方protobuf协议请求案例

收到 Issues , 库中的代码不能使用了,看起来是接口的协议更新后使用了protobuf。

万方protobuf协议请求案例_第1张图片


控制台抓包, 看起来比较符合的接口 https://s.wanfangdata.com.cn/SearchService.SearchService/search?

习惯性通过 Initiator 进入断点。
万方protobuf协议请求案例_第2张图片
刷新页面

万方protobuf协议请求案例_第3张图片
查看各部分参数。
万方protobuf协议请求案例_第4张图片
控制台上打印一下 ,这个就是请求参数。
万方protobuf协议请求案例_第5张图片
再继续找。
万方protobuf协议请求案例_第6张图片
这里的e是返回的数据。
万方protobuf协议请求案例_第7张图片
万方protobuf协议请求案例_第8张图片

找到请求信息和返回信息后,可以按照对应格式构建一个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

万方protobuf协议请求案例_第9张图片

编译后的文件时 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协议请求案例_第10张图片

下面可以用代码测试请求,经过测试可以成功返回数据。
万方protobuf协议请求案例_第11张图片


关于如何解析返回的protobuf数据:
万方protobuf协议请求案例_第12张图片

逻辑是一样的,按照上面js拦截到的返回格式,构建一个pro文件,然后编译成py文件调用。
返回的内容很多,太麻烦,就不再写了。


代码更新到仓库了:

https://github.com/lixi5338619/lxSpider

你可能感兴趣的:(爬虫)