Fra*_*Boi 2 python get parameter-passing httpserver basehttprequesthandler
我有一个用 Python 创建的 HTTP 服务器
from http.server import BaseHTTPRequestHandler, HTTPServer
import bson.json_util
import json
server = HTTPServer((ip, port), GetHandler)
print ('Starting server, use <Ctrl-C> to stop')
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)
在哪里 GetHandler
class GetHandler(BaseHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
def do_GET(self):
json_string = json.dumps({"message" : "Hello"}, default=bson.json_util.default)+"\n"
self._set_headers()
self.wfile.write(json_string.encode())#encoding='UTF-8'
return
Run Code Online (Sandbox Code Playgroud)
假设我想从行do_GET中将一个变量传递给类的方法:我该怎么做?GetHandlerserver = HTTPServer((ip, port), GetHandler)
编辑
作为示例,假设我my_str在该行之前定义了一个字符串,server = HTTPServer((ip, port), GetHandler)并且我想将此字符串用作响应消息。
在 Python 中,您实际上可以在函数内创建类。然后这些类将通过闭包访问函数的局部变量。
以下代码定义了函数make_handler,该函数在调用时定义了一个新的“处理程序”类,其值在myvariable整个类中可用:
import json
from http.server import BaseHTTPRequestHandler, HTTPServer
def make_handler(myvariable):
class GetHandler(BaseHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header('Content-type', 'text/plain')
self.end_headers()
def do_GET(self):
self._set_headers()
self.wfile.write(myvariable.encode('utf8'))
return
return GetHandler
server = HTTPServer(('127.0.0.1', 50002), make_handler('my_str'))
print ('Starting server, use <Ctrl-C> to stop')
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)