4

アプリケーションの 1 つに Web インターフェイスを提供したいと考えています。BaseHTTPRequestHandlerこれを実現するために、パッケージからBaseHTTPServer( を呼び出すクラスに)サブクラス化し、HTTP要求_RequestHandler用の独自のハンドラーを実装します。HEAD / GET / POST / PUT

「通常のファイル」のリクエストを受け取ると、それを開き、ファイル システムから読み取り、ブラウザに提供します。それはうまくいきます。ただし、Web インターフェースであるため、特定の要求をアプリケーションのバックエンドに伝えたいと考えています。これを行うには、サーバーにインターフェイスを提供してもらいたいです。このインターフェイスを介して、特定の URL のコールバック関数を (バックエンドで) 登録できます。これは、登録された URL にリクエストが着信したときに呼び出され、リクエストのヘッドとボディを渡します。そのURLに登録されたリクエストハンドラ(=コールバック関数)に

私はe。このようなことができるようになりたいです。

def callback_function(request):
   # Do some processing.
   return response

srv = WebServer(port = 8080, webroot = "htdocs/")
srv.register("/cgi-bin/test", callback_function)
srv.run()

これで、誰かがブラウザで登録されていない任意の URL を要求すると、Web サーバーは指定されたファイル (「Web ルート」に関連する) をロードして配信します。

原則としてこれを実装する方法を知っています。異なる方法で処理する必要がある URL を辞書に配置します。リクエストごとに、リクエストされた URL がディクショナリにあるかどうかを確認します。はいの場合は、リクエスト データ (HTTP ヘッダーとボディ) を "リクエスト オブジェクト" に入れ、その URL に登録されているコールバック関数を呼び出して、そのリクエスト オブジェクトを渡します。コールバック関数から応答オブジェクトを取得し、その内容 (HTTP ヘッダーと本文) を抽出してクライアントに提供します。URL が「特別に処理される」ディクショナリにない場合は、ファイル システムから (「Web ルート」を基準にして) ファイルをロードし、それを提供します。

問題は、Web サーバーを実行するために、このようなことをしなければならないことです。

server = HTTPServer(("localhost", port), _RequestHandler)
server.serve_forever()

ここでの問題は、 のインスタンスであるオブジェクトを のコンストラクターに渡すことができないことです。クラス自体に合格する必要があります。インスタンスを作成しますが、これにはアクセスできません。そのため、メソッドを呼び出すことができず、コールバック関数を登録できません (または、コールバック関数の辞書をコンストラクターなどに渡します)。_RequestHandlerHTTPServerHTTPServer

私に何ができる?カスタム データ オブジェクトをインスタンスに取得する何らかの方法があるはず_RequestHandlerですよね? つまり、そうでない場合、そのサーバーのものはすべて深刻に制限されているように見えます. のインスタンスにアクセスできないため、どうすればそれができるかわかりません_RequestHandler。それは私のためにクラスによって作成されHTTPServer、外部には渡されません。

助言がありますか?

4

0 に答える 0