c python通信protobuf_python 处理protobuf协议

背景:需要用django基于python3模拟一个http接口,请求是post方式,body是protobuf string,返回也是protobuf string

设计:django获取pb string的post body反序列化成json,通过json里面的指定字段的值获取对应的返回json, 并将返回的json序列化成pb string

重点:需要用python实现基于protobuf协议将json转化为pb string,将pb string转成json

步骤:

1.安装protobuf

安装protobuf,可直接下载编译后的压缩包直接解压后配置环境变量使用,我这里使用源码包安装方式【mac or linux】

下载源码包 https://github.com/protocolbuffers/protobuf/release

直接点击下载图示包,或者右键复制下载链接再通过wget下载

752966-20181016101902279-1328378202.png

解压并安装

tar -zxvf protobug-all-3.6.1.tar.gz

cd protobuf-3.6.1 && ./configure && make && make check && make install

执行完毕之后通过命令 protoc --version校验是否安装成功,能显示版本则表示安装成功

752966-20181016114954427-1966911148.png

2.python安装protobuf,直接通过pip安装

pip3 install protobuf

安装完成之后能成功导入 google.protobuf表示成功

752966-20181016115149074-2044997839.png

3.根据协议生成python文件

将protobuf协议原文件openrtb.proto放在example目录包下,并执行命令则会生成对应的py文件openrtb_pb2.py

protoc --python_out=. openrtb.proto

752966-20181016120728233-435814605.png

4.实现pb和json的相互转换

from example importopenrtb_pb2from google.protobuf.json_format importMessageToJson, Parse#将pbStringRequest【protobuf string类型的请求body】转化为json string以便解析请求中的某个指定参数

defpb_to_json(pbStringRequest){

req=openrtb_pb2.BidRequest()

req.ParseFromString(pbStringRequest)

# preserveing_proto_field_name 设置为 True 可以保留 protobuf 的原有字段名,不然会自动转驼峰,如 request_id 会被自动转化为 requestId

jsonStringRequest=MessageToJson(req,preserving_proto_field_name=True)returnjsonStringRequest }#将jsonStringResponse转化为pbString返回

defjson_to_pb(jsonStringResponse){

bidResponse=openrtb_pb2.BidResponse()

Parse(jsonStringResponse, bidResponse)

pbStringResponse=bidResponse.SerializeToString()returnpbStringResponse }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值