python使用http.server搭建服务

python3的http.server模块可以搭建简单的http服务。

服务端代码

#! /usr/bin/env python3
# -*- coding:UTF-8 -*-
from http.server import HTTPServer, BaseHTTPRequestHandler
import json
import cgi
import datetime

# in:
# {'history':["q1", "a1", "q2", "a2"], 'query':"are you ok?"}
class RequestHandler(BaseHTTPRequestHandler):
    def do_POST(self):
        self.send_error(415, 'Only get is supported')

    def do_GET(self):
        ctype, pdict = cgi.parse_header(self.headers['content-type'])
        print(ctype, pdict)
        print(f"ctype:{ctype}")
        print(f"pdict:{pdict}")

        path = str(self.path)  # 获取请求的url
        print(f"path:{path}")

        length = int(self.headers['content-length'])  # 获取除头部后的请求参数的长度
        datas = self.rfile.read(length) # 获取请求参数数据,请求数据为json字符串
        print(f"datas:<<{datas}>>")
        rjson = json.loads(datas.decode())
        print(f"rjson:<<{rjson}>>, type<{type(rjson)}>")

        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()
        self.wfile.write(json.dumps({'ret':0}).encode())
                

if __name__ == '__main__':
    host = ('',8000)
    server = HTTPServer(host, RequestHandler)
    print("Starting server, listen at: %s:%s" % host)
    server.serve_forever()

客户端请求

GET http://10.20.42.93:6000/ HTTP/1.1
content-type: application/json; charset=utf-8

{
    "name":"chatglm"
}

服务端打印

# python3 test_http.py
Starting server, listen at: :8000
application/json {'charset': 'utf-8'}
ctype:application/json
pdict:{'charset': 'utf-8'}
path:/
datas:<<b'{\r\n    "name":"chatglm"\r\n}'>>
rjson:<<{'name': 'chatglm'}>>, type<<class 'dict'>>
10.20.42.49 - - [17/Jul/2023 16:12:45] "GET / HTTP/1.1" 200 -

参考资料

BaseHTTPRequestHandler实现简单的API接口

官方手册:《http.server — HTTP 服务器》

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值