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):
# 構(gòu)建 JSON-RPC 請(qǐng)求
request_data = {
'method': method,
'params': params,
'id': 1
}
#json數(shù)據(jù)轉(zhuǎn)化為網(wǎng)絡(luò)字節(jié)流數(shù)據(jù)
json_data = json.dumps(request_data).encode('utf-8')
# 發(fā)送 POST 請(qǐng)求
response = requests.post(self.server_url, json_data, headers={'Content-type': 'application/json'})
# 解析響應(yīng)
result = response.json()
if 'error' in result:
raise Exception(result['error'])
return result['result']
# 創(chuàng)建 RPC 客戶端實(shí)例
client = RPCClient('http://192.168.1.9:8000')
# 調(diào)用遠(yuǎn)程方法
result = client.call('add', [3, 5])
print("Result:", result)
1.http 服務(wù)端-RPC服務(wù)端
import json
from http.server import BaseHTTPRequestHandler, HTTPServer
# 自定義處理程序類
class RPCHandler(BaseHTTPRequestHandler):
def do_POST(self):
# 解析接收到的 JSON 數(shù)據(jù)
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 請(qǐng)求
result = self.process_request(data)
# 構(gòu)建響應(yīng)
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
# 將python對(duì)象轉(zhuǎn)為json字符串,encode用于將字符串轉(zhuǎn)換為字節(jié)流b開頭,默認(rèn)用utf-8編碼
print(json.dumps(result).encode('utf-8'))
self.wfile.write(json.dumps(result).encode('utf-8'))
def process_request(self, data):
# 在這里處理 RPC 請(qǐng)求
# 根據(jù)請(qǐng)求內(nèi)容調(diào)用相應(yīng)的函數(shù)或方法
# 返回結(jié)果
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'}
# 啟動(dòng) RPC 服務(wù)器
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客戶端到服務(wù)端的HTTP/JSON報(bào)文
文章來源:http://www.zghlxwxcb.cn/news/detail-834461.html
3.2服務(wù)端到客戶端的HTTP/JSON報(bào)文
文章來源地址http://www.zghlxwxcb.cn/news/detail-834461.html
到了這里,關(guān)于http post協(xié)議實(shí)現(xiàn)簡(jiǎn)單的rpc協(xié)議,WireShark抓包分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!