当前位置:首页 > 编程笔记 > 正文
已解决

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

来自网友在路上 149849提问 提问时间:2023-10-23 22:17:30阅读次数: 49

最佳答案 问答题库498位专家为你答疑解惑

文章目录

  • 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报文

在这里插入图片描述

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"http post协议实现简单的rpc协议,WireShark抓包分析":http://eshow365.cn/6-22759-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!