背景:需要用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)   
  jsonStringRequest = MessageToJson(req)
  return jsonStringRequest
} # 将jsonStringResponse转化为pbString返回
def json_to_pb(jsonStringResponse){
  bidResponse = openrtb_pb2.BidResponse()
  Parse(jsonStringResponse, bidResponse)
  pbStringResponse = bidResponse.SerializeToString()
  return pbStringResponse
}

python 处理protobuf协议的更多相关文章

  1. python爬虫之protobuf协议介绍

    前言 在你学习爬虫的知识过程中是否遇到下面的类型.如果有兴趣学习一下或者了解相关知识的,且不嫌在下才疏学浅,可以参考一下.欢迎各位网友的指正. 首先叙述一下问题的会出现的式样. 你可能会在请求参数中看 ...

  2. python通过protobuf实现rpc

    由于项目组现在用的rpc是基于google protobuf rpc协议实现的,所以花了点时间了解下protobuf rpc.rpc对于做分布式系统的人来说肯定不陌生,对于rpc不了解的童鞋可以自行g ...

  3. 初次使用Python脚本,proto协议文件转Lua代码

    使用IntelliJ IDEA编辑器编写Lua脚本的时候,安装一个插件 "EmmyLua" 可以对有代码提示功能 想把protoBuf协议文件转成Lua代码,然后给出代码提示 第一 ...

  4. Protobuf 协议语言指南

    l  定义一个消息(message)类型 l  标量值类型 l  Optional 的字段及默认值 l  枚举 l  使用其他消息类型 l  嵌套类型 l  更新一个消息类型 l  扩展 l  包(p ...

  5. mac环境使用python处理protobuf

    安装 brew install protobuf 然后再安装protobuf需要的依赖 brew install autoconf automake libtool 验证是否安装成功 protoc – ...

  6. protobuf 协议浅析

    目录 Protobuf 协议浅析 1. Protobuf 介绍 1.1 Protobuf 基本概念 1.2 Protobuf 的优点 1.3 Protobuf, JSON, XML 的区别 2. Pr ...

  7. Python使用Protobuf&&如何赋值&&如何正反序列化

    前言 使用protobuf主要是两个步骤,序列化和反序列化. 关于Proto有哪些数据类型,然后如何编写,此处就不赘述了,百度一下有很多. 此文主要是总结,python使用protobuf的过程,如何 ...

  8. 杂项之python描述符协议

    杂项之python描述符协议 本节内容 由来 描述符协议概念 类的静态方法及类方法实现原理 类作为装饰器使用 1. 由来 闲来无事去看了看django中的内置分页方法,发现里面用到了类作为装饰器来使用 ...

  9. Google的Protobuf协议分析

    protobuf和thrift类似,也是一个序列化的协议实现,简称PB(下文出现的PB代表protobuf). Github:https://github.com/google/protobuf 上图 ...

随机推荐

  1. Java基础之二、类的知识

    类定义---方法及其处理的数据对象的集合结构 将现实的对象(物体)和概念映射到程序中的对象(变量)中 1:使用new运算符创建的类类型的主体称为实例,创建实例的操作称为实例化, new Account ...

  2. redis学习三连奏,绝对让你彻底吃透分布式架构精髓

    2020年初,远程办公与直播授课成为国民刚需,腾讯因此免费开放可支持300人同时在线会议的“腾讯会议”.一时之间,这款软件的用户呈爆发性增长,据统计,腾讯会议一天就有近较100倍日常的会议数量. 谈及 ...

  3. python进阶----深拷贝&浅拷贝

    复制需要区分,,复制的是源文件的数据,还是指向源文件数据的地址 1.引用   b=a时,理解为b指向了a指向的数据,相当于引用复制 a=[1,2] b=a #验证复制的是数据还是地址 #1.查看ab的 ...

  4. 【React Native】集成声网Agora语音通讯

    前言: 公司的产品是一款基于社交的内容聊天软件,需要集成语音通讯功能,在写iOS原生项目时,用到的就是Agora SDK,现在写React Native也直接采用了Agora的库. 集成iOS.And ...

  5. Don't assign one object to another one

    correct way, when changing object, firstly you should create this object and then assign its propert ...

  6. Java高级项目实战之CRM系统01:CRM系统概念和分类、企业项目开发流程

    1. CRM系统介绍 CRM系统即客户关系管理系统, 顾名思义就是管理公司与客户之间的关系. 是一种以"客户关系一对一理论"为基础,旨在改善企业与客户之间关系的新型管理机制.客户关 ...

  7. 网络共享服务(二)之NFS

    NFS: Network File System,是一种基于TCP/IP传输的网络文件系统协议,最初由SUN公司开发.通过使用NFS协议,客户机可以像访问本地目录一样访问服务器中的共享资源.但是,NF ...

  8. CF468A | 24 Game 找规律+打表

    (翻译版本来自 Luogu by lonelysir ) 题目描述 小X一直很喜欢一个纸牌游戏:"24点",但最近他发现这个游戏太简单了,所以他发明了一个新游戏. 你有一个整数序列 ...

  9. 曼孚科技:AI语音交互领域常用的4个术语

    ​语音交互是基于语音输入的新一代交互模式,比较典型的应用场景是各类语音助手. 本文整理了语音交互领域常用的4个术语,希望可以帮助大家更好地理解这门学科. 1. 语音合成标记语言(SSML) 语音合成标 ...

  10. LeetCode 112. 路径总和 (递归遍历二叉树)

    题目链接:https://leetcode-cn.com/problems/path-sum/ 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和 ...