我已经看到了this问题,但我希望能够从处理程序外部访问POST的数据。
有没有办法做到这一点?
代码如下:
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之后不赋值
发布于 2011-06-02 00:27:07
这是因为postVars在由HTTPServer创建的MyHandler实例中受到本地影响。如果要访问它,请在do_POST方法的开头将postVars声明为全局变量。
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上下文之外的变量来实现什么。
发布于 2016-03-22 17:33:40
BaseHTTPServer作为BaseHTTPRequestHandler上的一个属性可用。这意味着您可以使postVars在服务器上可用。
如果您像这样将BaseHTTPServer子类化:
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保存在服务器上,如下所示:
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:
server_class = MyServer
httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)
print httpd.postVars通常,该解决方案比具有全局变量更可取。
https://stackoverflow.com/questions/6204029
复制相似问题