用python3.10编写一个http服务工具;通过接收到post请求,返回相应的json数据,接口在界面显示,可自己编辑ip和端口;json内容给一个输入框,输入想要返回json值

该文章详细描述了一个使用PythonTkinter创建的HTTP服务器,处理POST请求并将用户输入的JSON数据转换为响应。还涉及了线程启动、异常管理和处方数据的JSON结构。
import sys
from tkinter import Tk, Label, Entry, Button, Text, messagebox
import tkinter as tk
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import urlparse, parse_qs
import json
import threading


# 创建一个自定义的请求处理类
class RequestHandler(BaseHTTPRequestHandler) :
    # 处理POST请求
    def do_POST(self) :
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)
        print('接收到的POST请求URL:', self.path)
        print('接收到的POST请求内容:', post_data.decode('utf-8'))
        # print('打印出post_data',post_data)
        parsed_data = parse_qs(post_data.decode('utf-8'))
        # 获取请求参数,这里假设参数名为'content'
        content = parsed_data.get('content', [''])[0]

        # 构造要返回的JSON数据

        # json_str1= json_entry.get()
        # response_data=json.loads(json_str1)
        json_str1=json_entry.get("1.0", tk.END)
        # print(json_str1)
        print('要返回的JSON数据:', json_str1)
        response_data=eval(json_str1)
        response_json = json.dumps(response_data)

        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()

        self.wfile.write(response_json.encode('utf-8'))

# 启动HTTP服务的函数
def start_server(ip, port) :
    server_address = (ip, port)
    print(server_address)
    httpd = HTTPServer(server_address, RequestHandler)
    print(httpd)
    httpd.serve_forever()


# 点击按钮时执行的函数
def start_button_click() :
    ip = ip_entry.get()
    port = int(port_entry.get())

    try :
        # 启动HTTP服务的线程
        threading.Thread(target=start_server, args=(ip, port), daemon=True).start()
        messagebox.showinfo('提示', 'HTTP服务已启动')
    except Exception as e :
        messagebox.showerror('错误', f'启动HTTP服务出错:{str(e)}')


# 创建Tkinter窗口
root = Tk()
root.title('HTTP服务工具')

# 创建IP标签和输入框
ip_label = Label(root, text='IP地址:')
ip_label.pack()
ip_entry = Entry(root)
ip_entry.insert(0, '172.26.74.39')  # 默认IP地址为127.0.0.1
ip_entry.pack()

# 创建端口标签和输入框
port_label = Label(root, text='端口:')
port_label.pack()
port_entry = Entry(root)
port_entry.insert(0, '8383')  # 默认端口号为8383
port_entry.pack()

# 创建JSON数据标签和输入框
json_label = Label(root, text='JSON数据:')
json_label.pack()
json_obj={
            "code": 200,
            "message": "获取处方成功!",
            "data": {
                "prescriptionId": "IP20230803100122",
                "innerId": 0,
                "sysRecipeCode": None,
                "hospitalName": "test",
                "quantity": 7,
                "boilType": 0,
                "boilTypeName": "煎药",
                "recipientName": "题",
                "sex": "女",
                "age": 1,
                "receiveTime": "2023-08-03T15:10:52",
                "remark": None,
                "details": [
                    {
                        "medicineCode": "1030",
                        "medicineName": "艾叶",
                        "hisMedicineName": None,
                        "dose": 5.0000,
                        "doseUnit": "g",
                        "specialBoilType": "煎煮"
                    }
                ]
            }}
json_entry = Text(root, height=10, width=50)
json_entry.insert("1.0", str(json_obj))
json_entry.pack()

# 创建启动按钮
start_button = Button(root, text='启动服务', command=start_button_click)
start_button.pack()
root.geometry("400x300")  # 设置窗口大小为400x300像素
# 运行Tkinter事件循环
root.mainloop()

注意事项:json值中,null需要修改成None;这里用到了eval,去掉了字符串前后的符号,传递值给了变量。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值