gpt4 book ai didi

python - do_POST 过程中出现 KeyError,但 key 存在

转载 作者:可可西里 更新时间:2023-11-01 16:32:10 25 4
gpt4 key购买 nike

这是我的 Web 服务器根据 GET 请求(加上内存列表的内容)提供的表单。我试图做到这一点,以便在提交消息时将其附加到内存中。表格如下:

form = ''' <!DOCTYPE html><html><head><title>Server</title></head><body>
<form action="/basic-server.py" method="post">
<label>Message <input name="message" type="text" /></label>
</form>
</body></html> '''

memory = []

现在这是我使用 BasicHTTPRequestHandler 的 POST 方法的内容:

def do_POST(self):

length = int(self.headers.get('Content-Length'))
postvars = parse.parse_qs(self.rfile.read(length))
memory.append(postvars["message"])

self.send_response(303)
self.send_header('Location', '/')
self.end_headers()

它为“消息”抛出一个 KeyError。让我感到困惑的是,如果我删除该行并打印出 postvars,它看起来就像一本带有“消息”键的字典,其中包含我在表单中输入的消息。

如果我使用 memory.append(postvars) 并输入“test”,应用程序会运行并附加以下字典:{b'message': [b'test']}。 'b'字符是什么?如果我使用 [b'message'] 作为键,它会起作用,但会将 [b'test'] 返回到内存而不是简单的测试。

最佳答案

修复

您需要对通过post请求推送的信息进行解码。

之前

postvars = parse.parse_qs(self.rfile.read(length))

应该变成...

之后

postvars = parse.parse_qs(self.rfile.read(length).decode())

说明

在原始代码中,postvars 是字节文字的字典,而不是字符串文字。 Here is a good explanation of this.

所以在之前postvars == [{b'message': [b'Post Message']}],意思是键和值都是字节文字。您不能将字符串 ['message'] 用作键,因为键是字节实例,而不是字符串实例。这里的关键是[b'message']

之后,postvars 变为 [{'message': ['Test']}] - 键和值现在已解码按预期转换为字符串实例。

关于python - do_POST 过程中出现 KeyError,但 key 存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45341464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com