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)
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协议的更多相关文章
- python爬虫之protobuf协议介绍
前言 在你学习爬虫的知识过程中是否遇到下面的类型.如果有兴趣学习一下或者了解相关知识的,且不嫌在下才疏学浅,可以参考一下.欢迎各位网友的指正. 首先叙述一下问题的会出现的式样. 你可能会在请求参数中看 ...
- python通过protobuf实现rpc
由于项目组现在用的rpc是基于google protobuf rpc协议实现的,所以花了点时间了解下protobuf rpc.rpc对于做分布式系统的人来说肯定不陌生,对于rpc不了解的童鞋可以自行g ...
- 初次使用Python脚本,proto协议文件转Lua代码
使用IntelliJ IDEA编辑器编写Lua脚本的时候,安装一个插件 "EmmyLua" 可以对有代码提示功能 想把protoBuf协议文件转成Lua代码,然后给出代码提示 第一 ...
- Protobuf 协议语言指南
l 定义一个消息(message)类型 l 标量值类型 l Optional 的字段及默认值 l 枚举 l 使用其他消息类型 l 嵌套类型 l 更新一个消息类型 l 扩展 l 包(p ...
- mac环境使用python处理protobuf
安装 brew install protobuf 然后再安装protobuf需要的依赖 brew install autoconf automake libtool 验证是否安装成功 protoc – ...
- protobuf 协议浅析
目录 Protobuf 协议浅析 1. Protobuf 介绍 1.1 Protobuf 基本概念 1.2 Protobuf 的优点 1.3 Protobuf, JSON, XML 的区别 2. Pr ...
- Python使用Protobuf&&如何赋值&&如何正反序列化
前言 使用protobuf主要是两个步骤,序列化和反序列化. 关于Proto有哪些数据类型,然后如何编写,此处就不赘述了,百度一下有很多. 此文主要是总结,python使用protobuf的过程,如何 ...
- 杂项之python描述符协议
杂项之python描述符协议 本节内容 由来 描述符协议概念 类的静态方法及类方法实现原理 类作为装饰器使用 1. 由来 闲来无事去看了看django中的内置分页方法,发现里面用到了类作为装饰器来使用 ...
- Google的Protobuf协议分析
protobuf和thrift类似,也是一个序列化的协议实现,简称PB(下文出现的PB代表protobuf). Github:https://github.com/google/protobuf 上图 ...
随机推荐
- 【小白视频学Java for循环】3分钟学会Java的for循环,让看懂for循环嵌套再不是难事
目录 一.单个for循环介绍 二.for循环嵌套 听讲时能听懂的for循环为什么一做题就晕菜?一个for循环还勉强能看懂,但为什么一看到双重for循环脑子里就感觉脑子全是浆糊? 如果有上述问题那么就继 ...
- springcloud服务已经关闭但是Eureka显示服务状态一直为UP
问题: 最近遇到一个很奇怪的问题,就是使用springcloud的时候,服务明明已经停止,但是在eureka中一直显示此服务状态为UP,这样就导致了请求再次过来的时候被分发到已经停止的服务上,其实这是 ...
- 【python基础语法】模块和包管理,文件的操作(第8天课堂笔记)
''' 模块和包管理 模块和包的定义: 模块:模块是一个Python文件,以.py结尾,包含了Python对象定义和Python语句 包:Python中的包就是一个包含__init__.py文件的目录 ...
- java-重写
重写有要求 1. 方法名:必须和父类被重写的方法名相同 2. 形参列表:必须和父类被重写的方法名相同 3. 返回值类型: A. 基本数据类型和void:要求与父类被重写的返回值数据类型一致 B. 引用 ...
- MySQL 8 备份与恢复
备份应用的场景包括:系统崩溃.硬件故障.用户错误.升级MySQL Installation.传输MySQL Installation到另一台机器.设置复制等. Slave Server备份 在备份Sl ...
- VMware Workstation Pro工具
安装包 链接:https://pan.baidu.com/s/1n-URb83lHtric3Ds8UbF9Q 提取码:c9z5 密钥 FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA CV7 ...
- ZedGraph5.1.5源码分析去掉鼠标悬浮内容闪烁问题(附源码下载)
场景 在使用ZedGraph绘制曲线图时,将鼠标悬浮时内容闪烁,且频率很高. 找到其源码,发现不论鼠标移动的范围大小,甚至乎不论鼠标是否移动,都要刷新一次Tooltip. 注: 博客主页:https: ...
- 【Pyecharts可视化分享】杭州步行热门路线等~
前言 本文包括内容如下: 杭州步行热门路线 渐变效果散点图 均是Echarts官方提供等示例,本文将会通过Pyecharts来进行实现. 杭州步行热门路线 因为代码中需要调用百度地图,所以开始之前你需 ...
- Python之filter()函数与替代实现
介绍 filter(f,x)函数用于过滤序列并返回迭代器,结果保留x中f为True的元素,需要新的序列通过list()转换. 例子 过滤列表中的字符串,保留数字. >>> i = [ ...
- P4802 [CCO 2015]路短最
Problem 这题的题意是 求一条 经过 起点和终点的 最长路径.且一个点只能经过一次. 我们设定 \(dis_{i,j}\) 为 i 到 j 的距离(应该没有重边) 要注意的是 不能用 \(Flo ...