zoukankan      html  css  js  c++  java
  • 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下载

    解压并安装

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

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

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

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

    pip3 install protobuf

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

    3.根据协议生成python文件

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

    protoc  --python_out=. openrtb.proto

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

    from example import openrtb_pb2
    from google.protobuf.json_format import MessageToJson, Parse
    
    # 将pbStringRequest【protobuf string类型的请求body】转化为json string以便解析请求中的某个指定参数
    def pb_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)
      return jsonStringRequest } # 将jsonStringResponse转化为pbString返回

    def json_to_pb(jsonStringResponse){   
      bidResponse
    = openrtb_pb2.BidResponse()   
      Parse(jsonStringResponse, bidResponse)   
      pbStringResponse
    = bidResponse.SerializeToString()   
      return pbStringResponse }
  • 相关阅读:
    mysql如何修改密码,root密码忘记怎么办?
    杂碎知识点
    mysql的数据类型4---字符串类型
    mysql的数据类型3---日期与时间类型
    mysql的数据类型1---浮点和定点类型
    mysql的数据类型1---整数类型
    安卓学习简记:基础知识(一)
    使用eclipse学习java第三课
    使用eclipse学习java第二课
    一些C和C++的常见问题集锦 ----不停更新
  • 原文地址:https://www.cnblogs.com/smileyes/p/9797258.html
Copyright © 2011-2022 走看看