如何使用Python socket获取表单id为message的输入框提交值
解决方案
你不需要额外加前端JS就可以实现需求,只需要在服务端解析请求中的GET参数即可,所有依赖均为Python内置库,具体修改如下:
修改后的 website.py 代码
import socket from urllib.parse import parse_qs, urlparse SERVER_HOST = '127.0.0.1' SERVER_PORT = 8000 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.bind((SERVER_HOST, SERVER_PORT)) server_socket.listen(1) print('Listening on port %s ...' % SERVER_PORT) while True: client_connection, client_address = server_socket.accept() request = client_connection.recv(1024).decode() # 解析请求内容提取参数 if request: request_line = request.splitlines()[0] method, path, _ = request_line.split() # 解析路径中的查询参数 parsed_path = urlparse(path) query_params = parse_qs(parsed_path.query) # 提取并打印message内容 if 'message' in query_params: user_input = query_params['message'][0] print(f"用户提交的message内容:{user_input}") with open('form.html', 'r', encoding='utf-8') as f: file = f.read() # 响应头指定编码避免中文乱码 response = 'HTTP/1.0 200 OK\nContent-Type: text/html; charset=utf-8\n\n' + file client_connection.sendall(response.encode()) client_connection.close() server_socket.close()
关键逻辑说明
- 用Python内置的
urllib.parse模块处理URL和查询参数,不需要额外安装第三方库 - 拆分请求头第一行拿到请求路径,解析路径后拼接的查询参数
- 匹配到
message参数就打印对应的用户输入内容
form.html 可选修改(无需无刷新提交可忽略)
如果你希望用户提交后页面不刷新,才需要在script标签中添加以下代码,原有表单结构不需要改动:
const form = document.querySelector('form') form.addEventListener('submit', e => { // 阻止默认跳转提交行为 e.preventDefault() const msg = document.getElementById('message').value // 编码后提交避免特殊字符异常 fetch(`/?message=${encodeURIComponent(msg)}`) // 提交后清空输入框 form.reset() })
内容的提问来源于stack exchange,提问作者ItsMe
相关产品推荐
相关产品推荐

