如何将参数传递给 Python 中 BaseHTTPRequestHandler 类的 GET 处理程序方法

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)并且我想将此字符串用作响应消息。

exh*_*uma 5

在 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)