Unixドメインソケットにバインドされた基本HTTPサーバーを作成しようとしていますが、UnixStreamServerでBaseHTTPRequestHandlerサブクラスを使用すると、Python - UnixStreamServerでBaseHTTPRequestHandlerを使用すると例外が発生する
玩具server.py:私は、その後curl --unix-socket ./mysocket.sock http:/hello
でリクエストを送信
from SocketServer import UnixStreamServer
from BaseHTTPServer import BaseHTTPRequestHandler
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header("Content-Type", "text/plain")
self.end_headers()
self.wfile.write("Hi!")
server = UnixStreamServer('./mysocket.sock', MyHandler)
server.serve_forever()
、(Pythonの2.7.11を使用して)サーバーで、次の例外が発生:
Exception happened during processing of request from
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 290, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 318, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/SocketServer.py", line 652, in __init__
self.handle()
File "/usr/lib/python2.7/BaseHTTPServer.py", line 340, in handle
self.handle_one_request()
File "/usr/lib/python2.7/BaseHTTPServer.py", line 328, in handle_one_request
method()
File "server.py", line 6, in do_GET
self.send_response(200)
File "/usr/lib/python2.7/BaseHTTPServer.py", line 385, in send_response
self.log_request(code)
File "/usr/lib/python2.7/BaseHTTPServer.py", line 422, in log_request
self.requestline, str(code), str(size))
File "/usr/lib/python2.7/BaseHTTPServer.py", line 456, in log_message
(self.client_address[0],
IndexError: string index out of range
私がしましたUDSの呼び出しにクライアントアドレスの概念がないため、sock.accept()
が空の文字列をアドレスとして返すという事実に関連しています。しかし、BaseHTTPRequestHandlerはロギングに期待しています
MonkeypatchingやBaseHTTPServerにこのような小さな変更を加えないでこの問題を回避する方法はありますか? BaseHTTPRequestHandlerはUnixDataStreamでも動作するように設計されていますか?軽量UDS HTTPサーバーのPythonでのより良い提案ですか?
ありがとうございます!