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

news/2025/1/15 22:38:34/

文章目录

  • 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.ppmy.cn/news/1172085.html

相关文章

【Docker从入门到入土 3】Docker镜像的创建方法

Part3 一、Docker镜像1.1 镜像的概念1.2 镜像结构的分层 二、Docker镜像的创建2.1 基于现有镜像创建2.1.1 创建思路2.1.2 举个例子 2.2 基于本地模板创建2.3 基于Dockerfile 创建 三、Dockerfile 详解3.1 Dockerfile 操作指令3.1.1 常用的操作指令3.1.2 CMD和ENTRYPOINT的区别…

Kafka快速入门(最新版3.6.0)

文章目录 一、初识MQ1.1 什么是MQ1.2 同步和异步通讯1.1.1 同步通讯1.1.2 异步通讯 1.3 技术对比1.4 MQ的两种模式 二、初识Kafka2.1 Kafka的使用场景2.2 Kafka基本概念2.3 Topic与Partition 三、Kafka基本使用3.1 部署前的准备3.2 启动kafka服务器3.3 Kafka核心概念之Topic3.4…

【问题记录】解决Qt连接MySQL报“QMYSQL driver not loaded”以及不支持MySQL事务操作的问题!

环境 Windows 11 家庭中文版,64 位操作系统, 基于 x64 的处理器Qt 5.15.2 MinGW 32-bitmysql Ver 14.14 Distrib 5.7.42, for Win32 (AMD64) 问题情况 在Qt 5.15.2 中编写连接MySQL数据库代码后,使用 MinGW 32-bit 构建套件进行编译运行后,报…

LVS负载均衡及LVS-NAT模式

一、集群概述 1.1 集群的背景 集群定义:为解决某个特定问题将多个计算机组合起来形成一个单系统 集群目的:为了解决系统的性能瓶颈 集群发展历史: 垂直扩展:向上扩展,增加单个机器的性能,即升级硬件 水…

原型链继承

方式一:原型链继承 1.套路: (1)定义父类型构造函数 (2)给父类型的原型添加方法 (3)定义子类型的构造函数 (4)创建父类型的对象赋值给子类型的原型 &…

python输出小数控制的方法

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 一、要求较小的精度 将精度高的浮点数转换成精度低的浮点数。 1.round()内置方法 round()不是简单的四舍五入的处理方式。 >>> round(2.5) 2 >>> ro…

Linux常用的调试工具

在开发和调试Linux的过程中,经常会遇到各种各样的问题,如程序崩溃、性能低下、内存泄漏等。这时候,调试就显得尤为重要。调试技巧和工具能够帮助开发人员快速定位问题并快速解决。在本文中,我们将介绍一些常用的Linux调试技巧和工…

一键运行大语言模型服务,搭建聊天应用

前言 本文介绍一个可以快速搭建本地大语言模型的聊天服务,模型和代码已全部提供,不需要联网运行。项目使用的是Qwen-7B-Int4模型,只需要8G显存的显卡都能流畅运行,无论是Windows还是Linux系统都支持使用。 安装环境 安装GPU版本…