背景:需要用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 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 }

c python通信protobuf_python 处理protobuf协议相关推荐

  1. 逆向分析:还原 App protobuf 协议加密

    前言 之前有记录js逆向.安卓逆向等,今天这里记录下一些协议逆向,这种一般出现在websocket 协议. protobuf 协议等,某音,B站 APP等都有用到这些协议加密,而我们不再是像 js 端 ...

  2. 某音App protobuf协议还原逆向分析

    趣味模块 小红是一名爬虫开发工程师,自从上次小红解决了字体反爬.websocket协议.B站protobuf协议后,小红一直所向披靡,过五关斩六将,在一个多月的时间里一直没有遇到过有难度的问题.但是今 ...

  3. B 站弹幕 protobuf 协议还原分析

    这是「进击的Coder」的第 657 篇技术分享 作者:TheWeiJun 来源:逆向与爬虫的故事 " 阅读本文大概需要 3 分钟. " 目录 一.什么是protobuf? 二.网 ...

  4. netty 对 protobuf 协议的解码与包装探究(2)

    netty 默认支持protobuf 的封装与解码,如果通信双方都使用netty则没有什么障碍,但如果客户端是其它语言(C#)则需要自己仿写与netty一致的方式(解码+封装),提前是必须很了解net ...

  5. protobuf协议_gRPC 使用 protobuf 构建微服务

    gRPC 使用 protobuf 构建微服务 发表于 2018-05-02 | 阅读次数: 2997 | 字数统计: 1,805 gRPC 使用 protobuf 通信构建微服务 本文目录: 微服务架 ...

  6. 开源项目SMSS发开指南(三)——protobuf协议设计

    本文的第一部分将介绍protobuf使用基础以及如何利用protobuf设计通信协议.第二部分会给出smss项目的协议设计规范和源码讲解. 一.Protobuf使用基础 什么是protobuf pro ...

  7. B站弹幕文件protobuf协议的逆向和还原

    目标是B站弹幕的数据还原,随便打开一个视频,直接三连 能看到真实文本,但也有一些乱码,看一下 content-type content-type: application/octet-stream 参 ...

  8. Python基础 3.4 HTTP协议和静态Web服务器

    HTTP协议和静态Web服务器 3.4.1 HTTP协议 1.HTTP协议介绍 全程:超文本传输协议 作用:规定浏览器和web服务器通信的数据格式 HTTP协议是在应用层的协议,基于传输层的TCP传输 ...

  9. Python 高级:05 HTTP 协议和静态 Web 服务器

    一.HTTP 协议 1. HTTP 协议的介绍 HTTP 协议的全称是(Hyper Text Transfer Protocol),翻译过来就是超文本传输协议.超文本就是超级文本的缩写,是指超越文本限 ...

最新文章

  1. 2017年如何成为全栈工程师,这些技能是你必须具备的!
  2. PHP的上传文件思路及其代码
  3. MATLAB仿真TSC在哪里找,-bash:tsc:找不到命令
  4. 服务器互相备份不同步_详解容灾与备份,为数据安全保驾护航
  5. Redis源码分析(一)--Redis结构解析
  6. RPM 打包指南系列 一
  7. [Xcode 实际操作]四、常用控件-(12)环形进度条控件的使用
  8. C++编程基础一 28-编程练习一
  9. 使用ajaxfileupload.js上传文件成功之后,没有执行success方法
  10. 词性标注:中文词性标注简介
  11. 软件工程:编码和测试
  12. 实时换脸技术——直播,视频通话|脸部交换程序
  13. 人工智能趋势——2023 年综述
  14. 谈谈你对Spring Bean生命周期的理解【面试】
  15. euclidea4攻略_Euclidea几何构建10.4通关攻略
  16. 阿里旺旺 V5.60.03W
  17. Android WatchDog(4) - watchdog线程(Android 12)
  18. 计算机专业考研书目(中科大)
  19. 计算机二级中二叉树的考点,2019计算机二级(office高级应用)复习要点:二叉树的遍历...
  20. 涉密计算机及网络保密管理制度,长沙理工大学涉密计算机保密管理制度

热门文章

  1. sap 提取字符串中汉字
  2. ABAP 如何判断调用smartforms时是进行打印还是预览
  3. DELPHI的DBGRID有两个难点
  4. SAP: ALV的布局管理
  5. 冒险实施SAP HANA 农夫山泉缘何做第一个“吃螃蟹”者?
  6. 波司登在“寒潮”下再创新高,羽绒服行业真的靠天吃饭?
  7. 神武服务器维护打副本,6月9日神武2维护解读:120级副本奖励次数提升
  8. 为什么使用HashMap需要重写hashcode和equals方法_为什么要重写hashcode和equals方法?你能说清楚了吗...
  9. mysql gui tools 问题_Navicat与MySQL GUI Tools管理工具的优缺点对比
  10. java锁一次交互二次握手_Java后台开发面试实战(二):TCP三次握手四次挥手