当前位置: 首页 > article >正文

Python实现一个简单的 HTTP echo 服务器

一个用来做测试的简单的 HTTP echo 服务器。

from http.server import HTTPServer, BaseHTTPRequestHandler
import json

class EchoHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 构造响应数据
        response_data = {
            'path': self.path,
            'method': 'GET',
            'headers': dict(self.headers),
            'query_string': self.path.split('?')[1] if '?' in self.path else ''
        }
        
        # 设置响应头
        self.send_response(200)
        self.send_header('Content-Type', 'application/json')
        self.end_headers()
        
        # 发送响应
        self.wfile.write(json.dumps(response_data, indent=2).encode())
    
    def do_POST(self):
        # 获取请求体长度
        content_length = int(self.headers.get('Content-Length', 0))
        # 读取请求体
        body = self.rfile.read(content_length).decode()
        
        # 构造响应数据
        response_data = {
            'path': self.path,
            'method': 'POST',
            'headers': dict(self.headers),
            'body': body
        }
        
        # 设置响应头
        self.send_response(200)
        self.send_header('Content-Type', 'application/json')
        self.end_headers()
        
        # 发送响应
        self.wfile.write(json.dumps(response_data, indent=2).encode())

def run_server(port=8000):
    server_address = ('', port)
    httpd = HTTPServer(server_address, EchoHandler)
    print(f'Starting server on port {port}...')
    httpd.serve_forever()

if __name__ == '__main__':
    run_server()

这个 HTTP echo 服务器的特点:

  1. 支持 GET 和 POST 请求
  2. 返回 JSON 格式的响应
  3. 对于 GET 请求,会返回:
    • 请求路径
    • 请求方法
    • 请求头
    • 查询字符串
  4. 对于 POST 请求,额外返回请求体内容

使用方法:

  1. 运行脚本启动服务器
  2. 使用浏览器或 curl 访问 http://localhost:8000

测试示例:

# GET 请求
curl http://localhost:8000/test?foo=bar

# POST 请求
curl -X POST -d "hello=world" http://localhost:8000/test

http://www.kler.cn/a/468278.html

相关文章:

  • 自动采集商品信息、处理数据并自动上架到
  • Rocketmq 探索MQClientFactoryScheduledThread线程工作
  • QT----------QT Data Visualzation
  • 力扣283 移动零
  • JVM学习:CMS和G1收集器浅析
  • js -音频变音(听不出说话的人是谁)
  • 举例说明AI模型怎么聚类,最后神经网络怎么保存
  • Linux 基础七 内存
  • 自动驾驶控制算法-横纵向控制仿真
  • 【pyqt】(二)基础框架
  • Anaconda环境配置(Windows11+python3.9)
  • 【Python】Flink和Flask区别总结
  • Markdown流程图
  • 让 Agent 具备语音交互能力:技术突破与应用前景(16/30)
  • element输入框及表单元素自定义前缀
  • 【mybatis-plus问题集锦系列】使用mybatis实现数据的基础增删改查
  • GESP真题 | 2024年12月1级-编程题4《美丽数字》及答案(C++版)
  • 【Ubuntu】不能连上网络
  • 基于Spring Boot微信小程序电影管理系统
  • _使用CLion的Vcpkg安装SDL2,添加至CMakelists时报错,编译报错
  • [CTF/网络安全] 攻防世界 Training-WWW-Robots 解题详析
  • MySQL 【多表查询】
  • ppt pptx转成pdf有什么好的java工具
  • 车载通信架构 --- 智能汽车通信前沿技术
  • 2024 年 docker 提示index.docker.io
  • android基础之Lambda表达式的详细说明