码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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_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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    在这里插入图片描述

    3.WireShark抓包分析

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

  • 相关阅读:
    Rockland丨Rockland多克隆抗体阶段执行方案
    在腾讯云服务器OpenCLoudOS系统中安装maven(有图详解)
    ELF和静态链接:为什么程序无法同时在Linux和Windows下运行?
    FPGA高端项目:图像采集+GTP+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持
    RK3588平台开发系列讲解(项目篇)嵌入式AI的学习步骤
    目标检测 详解SSD原理,数据处理与复现
    分布式缓存寻址算法
    [附源码]java毕业设计影院售票系统
    小白必知必会的几个IP地址知识
    flutter开发的一个小小小问题,内网依赖下不来
  • 原文地址:https://blog.csdn.net/Wwc_code/article/details/133999093
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号