:Protocol.dataReceived
の代わりにHTTPChannel.allHeadersReceived
を使用して、チャンク要求をサポートしました。
あなたは、接続情報を格納するためのHTTPヘッダーを使用することができます:HTTPChannel.allHeadersReceived
方法でそれらを設定し、flask.request.headers
から取り出し、例えば:
from twisted.application import internet, service
from twisted.internet import reactor
from twisted.web.http import HTTPChannel
from twisted.web.server import Site
from twisted.web.wsgi import WSGIResource
from flask import Flask, request
app = Flask('app')
@app.route('/')
def index():
return 'User ID: %s' % request.headers['X-User-Id']
class MyHTTPChannel(HTTPChannel):
def allHeadersReceived(self):
user_id = 'my_user_id'
req = self.requests[-1]
req.requestHeaders.addRawHeader('X-User-Id', user_id)
HTTPChannel.allHeadersReceived(self)
class MySite(Site):
protocol = MyHTTPChannel
application = service.Application('myapplication')
service = service.IServiceCollection(application)
http_resource = WSGIResource(reactor, reactor.getThreadPool(), app)
http_site = MySite(http_resource)
internet.TCPServer(8008, http_site).setServiceParent(service)
私はツイストでクライアント証明書を使用に慣れていませんよ。私はProtocol.transport
で情報を取得できると仮定します。
ありがとうございました。この
data_received
の実装では、単一の要求を複数のdata_received
呼び出しに分割していないと想定していることが懸念されます。これは正当な仮定ですか? – orm@ormはい、そうです、私はそれについて考えませんでした。より正確な方法は 'HTTPChannel.allHeadersReceived'をオーバーライドすることです。コード例を更新しました。 –