lixi5338619 / lxBook

《爬虫逆向进阶实战》书籍代码库
622 stars 170 forks source link

protoc.exe编译proto文件失败 #1

Open yjshi2015 opened 2 years ago

yjshi2015 commented 2 years ago

玺哥,在编写protobuf协议的demo时遇到了如下3个问题,麻烦有时间指导下,感谢!

lixi5338619 commented 2 years ago

1、“属性赋值时,属性名不能自动带出,也不能访问”是指没有代码提示吗,确实没有,不过能根据属性点进去。 2、没有proto文件的截图,看不出来。 这里的对象是指map还是object ,可根据网站中的参数类型复写。 3、protoc和protobuf版本是否对应,也可能proto文件有问题。

yjshi2015 commented 2 years ago

1、“属性赋值时,属性名不能自动带出,也不能访问”是指没有代码提示吗,确实没有,不过能根据属性点进去。 2、没有proto文件的截图,看不出来。 这里的对象是指map还是object ,可根据网站中的参数类型复写。 3、protoc和protobuf版本是否对应,也可能proto文件有问题。


message SearchService {

message SearchSort { string field = 1; int32 order = 2; }

message CommonRequest { string searchType = 1; string searchWord = 2; SearchSort searchSort = 3;

其他属性省略……

}

message SearchRequest { CommonRequest commonRequest = 1; int32 interfaceType = 2; } }

②赋值逻辑

import request_pb2 as pb

search_request = pb.SearchService.SearchRequest()

SearchSort赋值

search_sort = pb.SearchService.SearchSort() search_sort.field = "" search_sort.order = 1

search_request.commonRequest.searchType = "paper" search_request.commonRequest.searchWord = "哔站"

SearchSort赋值

search_request.commonRequest.searchSort = search_sort bytes_body = search_request.SerializeToString() print(bytes_body)


    报错信息如下,所以这个searchSort属性应该怎么赋值?
`
Traceback (most recent call last):
  File "D:\idea_workspace\PythonDemo\com\syj\lx\chapter3\wanfang\WanfangPB.py", line 16, in <module>
    search_request.commonRequest.searchSort = search_sort
AttributeError: Assignment not allowed to field "searchSort" in protocol message object.
`
- 3、protoc.exe升级后的版本是win64下的3.21,protobuf包也升级到了最新版4.21.0,文件里syntax='proto3',不知道这个最新版的究竟是什么问题,编译总是一半,并且没有任何错误信息……
lixi5338619 commented 2 years ago

pycharm专业版,没用插件。 Proto文件没有问题,试试这个写法。 ` search_sort = pb.SearchService.SearchSort() search_sort.field = "1" search_sort.order = 0

search_request = pb.SearchService.CommonRequest() search_request.searchType = "paper" search_request.searchWord = "111" search_request.searchSort.CopyFrom(search_sort) ` 为啥只编译一半我也不清楚 = =