如何让Python HTTP Server仅提取POST请求中的目标消息内容?
如何从Python HTTP Server的请求中提取目标消息内容
当然可行!关键是要根据Unity发送的数据格式来做对应的解析,下面分几种常见情况给你说明:
1. 先明确Unity的请求数据格式
首先得确认Unity是用哪种方式把"test"发过来的——是纯文本、表单字段,还是JSON?不同的格式对应的解析逻辑不一样,先搞清楚这个会少走很多弯路。
2. 不同格式的提取实现
情况一:Unity发送纯文本数据
如果Unity直接把"test"作为请求体的原始内容发送(比如没有包装成表单或JSON),那处理起来最简单:
# 假设你用的是BaseHTTPRequestHandler content_length = int(self.headers.get('Content-Length', 0)) raw_data = self.rfile.read(content_length) # 把二进制数据解码为字符串,记得指定编码(通常是utf-8) target_message = raw_data.decode('utf-8').strip() # 这里target_message就是你要的"test"了 print(target_message)
情况二:Unity发送表单数据(用WWWForm)
很多Unity开发者会用WWWForm来构造请求,这种情况下数据是表单格式的:
Unity端示例代码:
WWWForm form = new WWWForm(); // 把消息放在名为"message"的字段里 form.AddField("message", "test"); UnityWebRequest www = UnityWebRequest.Post("http://your-server-ip:port", form); yield return www.SendWebRequest();
对应的Python服务器解析代码:
import urllib.parse content_length = int(self.headers.get('Content-Length', 0)) raw_data = self.rfile.read(content_length) # 解析表单数据,得到一个字典(值是列表类型) form_data = urllib.parse.parse_qs(raw_data.decode('utf-8')) # 提取目标字段,取列表的第一个元素 target_message = form_data.get('message', [''])[0] print(target_message) # 输出"test"
情况三:Unity发送JSON格式数据
如果Unity用JSON序列化对象发送(比如用JsonUtility),那需要解析JSON:
Unity端示例代码:
// 定义一个数据类 public class RequestData { public string message; } RequestData data = new RequestData(); data.message = "test"; string jsonStr = JsonUtility.ToJson(data); UnityWebRequest www = UnityWebRequest.Post("http://your-server-ip:port", jsonStr); // 一定要设置Content-Type头,告诉服务器这是JSON www.SetRequestHeader("Content-Type", "application/json"); yield return www.SendWebRequest();
对应的Python服务器解析代码:
import json content_length = int(self.headers.get('Content-Length', 0)) raw_data = self.rfile.read(content_length) # 解析JSON字符串为字典 json_data = json.loads(raw_data.decode('utf-8')) # 提取目标字段 target_message = json_data.get('message', '') print(target_message) # 输出"test"
3. 额外注意事项
- 编码统一:确保Unity和Python都用
utf-8编码,避免出现乱码问题 - 请求头匹配:比如发送JSON时,Unity必须设置
Content-Type: application/json,Python服务器也可以检查这个头来判断解析方式 - 异常处理:可以加try-except块处理解析失败的情况(比如数据格式错误),防止服务器崩溃
内容的提问来源于stack exchange,提问作者Jesais Pas
相关产品推荐
相关产品推荐

