1.http 客户端-RPC客户端
import json
import requests
# 定义 RPC 客户端类
class RPCClient:
def __init__(self, server_url):
self.server_url = server_url
def 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 + b
return {'result': result}
return {'error': 'Invalid request'}
# 启动 RPC 服务器
def run_server():
port = 8000
server_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报文
文章来源:https://www.toymoban.com/news/detail-834461.html
3.2服务端到客户端的HTTP/JSON报文
文章来源地址https://www.toymoban.com/news/detail-834461.html
到了这里,关于http post协议实现简单的rpc协议,WireShark抓包分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!