当前位置: 首页 > news >正文

http post协议实现简单的rpc协议,WireShark抓包分析

文章目录

  • 1.http 客户端-RPC客户端
  • 1.http 服务端-RPC服务端
  • 3.WireShark抓包分析
    • 3.1客户端到服务端的HTTP/JSON报文
    • 3.2服务端到客户端的HTTP/JSON报文

1.http 客户端-RPC客户端

import json
import requests# 定义 RPC 客户端类
class RPCClient:def __init__(self, server_url):self.server_url = server_urldef call(self, method, params):# 构建 JSON-RPC 请求request_data = {'method': method,'params': params,'id': 1}#json数据转化为网络字节流数据json_data = json.dumps(request_data).encode('utf-8')# 发送 POST 请求response = requests.post(self.server_url, json_data, headers={'Content-type': 'application/json'})# 解析响应result = response.json()if 'error' in result:raise Exception(result['error'])return result['result']# 创建 RPC 客户端实例
client = RPCClient('http://192.168.1.9:8000')# 调用远程方法
result = client.call('add', [3, 5])
print("Result:", result)

1.http 服务端-RPC服务端

import json
from http.server import BaseHTTPRequestHandler, HTTPServer# 自定义处理程序类
class RPCHandler(BaseHTTPRequestHandler):def do_POST(self):# 解析接收到的 JSON 数据content_length = int(self.headers['Content-Length'])json_data = self.rfile.read(content_length).decode('utf-8')print("-------json_data:{}".format(json_data))data = json.loads(json_data)print("-------data:{}".format(data))# 处理 RPC 请求result = self.process_request(data)# 构建响应self.send_response(200)self.send_header('Content-type', 'application/json')self.end_headers()# 将python对象转为json字符串,encode用于将字符串转换为字节流b开头,默认用utf-8编码print(json.dumps(result).encode('utf-8'))self.wfile.write(json.dumps(result).encode('utf-8'))def process_request(self, data):# 在这里处理 RPC 请求# 根据请求内容调用相应的函数或方法# 返回结果if 'method' in data:method = data['method']if method == 'add':if 'params' in data and len(data['params']) == 2:a, b = data['params']result = a + breturn {'result': result}return {'error': 'Invalid request'}# 启动 RPC 服务器
def run_server():port = 8000server_address = ('192.168.1.9', port)httpd = HTTPServer(server_address, RPCHandler)httpd.serve_forever()if __name__ == '__main__':run_server()

在这里插入图片描述

3.WireShark抓包分析

在这里插入图片描述

3.1客户端到服务端的HTTP/JSON报文

在这里插入图片描述

3.2服务端到客户端的HTTP/JSON报文

在这里插入图片描述

http://www.lryc.cn/news/204731.html

相关文章:

  • 1024程序员节
  • 嵌入式--->怎样选择编译语言,C C++或是Rust?
  • 一起学数据结构(12)——归并排序的实现
  • 读书笔记之《敏捷测试从零开始》(一)
  • 视频亮度太低了,如何调高
  • Xubuntu16.04系统中安装create_ap创建无线AP
  • WPF 设置全局静态参数
  • Leetcode链表问题汇总
  • 基于卷的磁盘扫描算法设计
  • 计算机组成原理-存储器概念
  • 力扣刷题 day54:10-24
  • Java基础篇 | Java8流式编程
  • SolidworksSimulation完成对压力容器的强度分析
  • 【C++】继承 ⑨ ( 继承中成员变量同名的处理方案 )
  • Python报错:‘EagerTensor‘ object has no attribute ‘reshape‘
  • docker-compose手册
  • 【珠峰 WEB 前端架构师课程】学习笔记 100 篇(完结)
  • Java线程中sleep()、wait()、yield()、join()方法的使用
  • 【机器学习】数据均衡学习笔记
  • 【软件教程】如何用C++交叉编译出能在Android运行的ELF程序或so动态库
  • 进阶JAVA篇- Map 系列集合的遍历方法与常用API
  • Auth.js:多合一身份验证解决方案 | 开源日报 No.60
  • SpringBoot整合Activiti7——任务监听器(七)
  • 电解电容寿命与哪些因素有关?
  • Opencv-图像插值与LUT查找表
  • 我为什么写博客?写博客给我带来了什么?
  • jdk11的HttpClient
  • Redis的优势
  • C++ string 类的其他操作
  • structs2 重构成SpringBoot架构