一个用来做测试的简单的 HTTP echo 服务器。
python
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 服务器的特点:
- 支持 GET 和 POST 请求
- 返回 JSON 格式的响应
- 对于 GET 请求,会返回:
- 请求路径
- 请求方法
- 请求头
- 查询字符串
- 对于 POST 请求,额外返回请求体内容
使用方法:
- 运行脚本启动服务器
- 使用浏览器或 curl 访问
http://localhost:8000
测试示例:
bash
# GET 请求
curl http://localhost:8000/test?foo=bar
# POST 请求
curl -X POST -d "hello=world" http://localhost:8000/test