首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展BaseHTTPRequestHandler -获取发布的数据

扩展BaseHTTPRequestHandler -获取发布的数据
EN

Stack Overflow用户
提问于 2011-06-01 23:53:05
回答 2查看 11.7K关注 0票数 5

我已经看到了this问题,但我希望能够从处理程序外部访问POST的数据。

有没有办法做到这一点?

代码如下:

代码语言:javascript
复制
import BaseHTTPServer

HOST_NAME = ''
PORT_NUMBER=8088

postVars = ''

class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):

    def do_POST(s):
        s.send_response(200)
        s.end_headers()
        varLen = int(s.headers['Content-Length'])
        postVars = s.rfile.read(varLen)
        print postVars

server_class = BaseHTTPServer.HTTPServer
httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)

try:
    httpd.handle_request()
except KeyboardInterrupt:
    pass

print postVars
httpd.server_close()

postVars在处理程序期间赋值,但在MyHandler之后不赋值

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-02 00:27:07

这是因为postVars在由HTTPServer创建的MyHandler实例中受到本地影响。如果要访问它,请在do_POST方法的开头将postVars声明为全局变量。

代码语言:javascript
复制
def do_POST(s):
  global postVars
  s.send_response(200)
  s.end_headers()
  varLen = int(s.headers['Content-Length'])
  postVars = s.rfile.read(varLen)

无论如何,我不确定您希望通过使用服务器和requestHandler上下文之外的变量来实现什么。

票数 9
EN

Stack Overflow用户

发布于 2016-03-22 17:33:40

BaseHTTPServer作为BaseHTTPRequestHandler上的一个属性可用。这意味着您可以使postVars在服务器上可用。

如果您像这样将BaseHTTPServer子类化:

代码语言:javascript
复制
class MyServer(BaseHTTPServer.HTTPServer):
    def __init__(self, *args, **kwargs):
         # Because HTTPServer is an old-style class, super() can't be used.
         BaseHTTPServer.HTTPServer.__init__(self, *args, **kwargs)
         self.postVars = None

您可以使用此服务器将postVars保存在服务器上,如下所示:

代码语言:javascript
复制
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):

    def do_POST(s):
        s.send_response(200)
        s.end_headers()
        varLen = int(s.headers['Content-Length'])
        s.server.postVars = s.rfile.read(varLen)
        print postVars

然后使用MyServer而不是BaseHTTPServer:

代码语言:javascript
复制
server_class = MyServer
httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)

print httpd.postVars

通常,该解决方案比具有全局变量更可取。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6204029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档