python - 无法使用 cgi.FieldStorage 获取 POST 值

标签 python http

我正在尝试使用 GET 将带有表单数据的简单 html 页面发送给用户,然后使用 POST 从表单接收变量。 HTML 文件如下所示:

<HTML>
<title> My Title</title>
<body>
<form  method="post" action="http.py">
<input name="Name" type="text"/>
<input name="Submit" type="submit" value="Submit" />
</form>
</body>
</HTML>

这是 python 脚本:

import os
import cgi
import sys
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler



class customHTTPServer(BaseHTTPRequestHandler):
        def do_GET(self):
                self.send_response(200)
                self.send_header('Content-type', 'text/html')
                self.end_headers()
                fh=open('index.html','r')
                self.wfile.write(fh.read())
                return

        def do_POST(self):
            form = cgi.FieldStorage()
            self.send_response(200)
            self.end_headers()
            self.wfile.write(form['Name'].value)


def main():
       try:
            server = HTTPServer(('',9111),customHTTPServer)
            print 'server started at port 8080'
            server.serve_forever()
       except KeyboardInterrupt:
            server.socket.close()

if __name__=='__main__':
       sys.exit(main())

但是 FieldStorage 一直都是空的。我已经尝试检查 self.rfile 中的内容,发现如果我尝试执行 self.rfile.readlines() ,浏览器会卡住,看起来脚本正在等待数据流结束。我应该从哪里获取我通过 POST 提交的 Name 变量?

最佳答案

在原来的代码中,我只是改了一行

form = cgi.FieldStorage()

form = cgi.FieldStorage(
    fp=self.rfile,
    headers=self.headers,
    environ={'REQUEST_METHOD':'POST'})

它似乎按您的预期工作。

http://pymotw.com/2/BaseHTTPServer/ 致敬对于关键的“环境”设置。 (默认情况下,cgi.FieldStorage 认为它正在处理 GET 请求。)

关于python - 无法使用 cgi.FieldStorage 获取 POST 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11333423/

相关文章:

delphi - 单个 TIdHTTPServer 组件可以同时处理 http 和 https 请求吗?

angularjs - angulars $resource 是否支持 etags?

delphi - 如何从当前 Windows 语言环境获取 HTTP 字符集名称?

jquery - 如何通过 AJAX 到 HTTP 请求 JSON 来预填充 Web 表单?

python - 如何正确排序其中包含数字的字符串

python - 具有其他列条件的新列

python - 基本 Python、Django、DRY - 从(模型)类调用方法

python - Scikit-learn 随机森林占用内存过多

python - 通过python检查查询是否成功运行

java - URL 连接获取输入流失败