简易python http数据读写服务

最近需要一个http服务中转一些数据,简单起见使用python搭建了个http数据读写服务

http_server.py

import os
import urllib
from http.server import HTTPServer, BaseHTTPRequestHandler


host = ('localhost', 10086)     # 主机名和端口号
data_path = '/tmp/http_data'    # 数据存储路径
if not os.path.exists(data_path):
    os.mkdir(data_path)


class Request(BaseHTTPRequestHandler):
    timeout = 5
    server_version = "Apache"  # 设置服务器返回的的响应头

    def do_GET(self):
        # 解析请求参数
        parse = urllib.parse.urlparse(self.path)
        path = parse.path
        query = parse.query
        query_dict = dict([(k, v[0]) for k, v in urllib.parse.parse_qs(query, True).items()])
        # 过滤非法请求
        illegal = False
        if not query_dict:
            illegal = True
        for k, v in query_dict.items():
            if '..' in k:
                illegal = True
            if k.startswith('/') or k.startswith('\\'):
                illegal = True
            if not os.path.abspath(os.path.join(data_path, k)).startswith(data_path):
                illegal = True
        if illegal:
            self.send_error(403)
            return
        # 处理请求
        data = {}
        if path == '/r':
            for k, v in query_dict.items():
                loc_path = os.path.join(data_path, k)
                if os.path.exists(loc_path):
                    with open(loc_path, 'r') as f:
                        data[k] = f.read()
                else:
                    data[k] = ''
        elif path == '/w':
            for k, v in query_dict.items():
                loc_path = os.path.join(data_path, k)
                with open(loc_path, 'w') as f:
                    f.write(v)
        else:
            self.send_error(403)
            return
        # 返回结果
        self.send_response(200)
        self.send_header("Content-type", "json")
        self.end_headers()
        self.wfile.write(str(data).encode())


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

启动命令:

python http_server.py

提交数据:

http://localhost:10086/w?k1=v1&k2=v2

读取数据:

http://localhost:10086/r?k1&k2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值