environ['wsgi.input']
스트림 에서 원시 본문을 저장하는 WSGI 미들웨어를 작성했습니다 . WSGI 환경에 값을 저장하여 request.environ['body_copy']
앱 내 에서 액세스 할 수 있습니다 .
request.get_data()
컨텐츠 유형에 관계없이 원시 데이터를 가져 오지만 HTTP 및 WSGI 동작을보다 잘 처리 하므로 Werkzeug 또는 Flask에서는 필요하지 않습니다 .
이것은 전체 본문을 메모리로 읽습니다. 예를 들어 큰 파일이 게시되면 문제가됩니다. Content-Length
헤더가 없으면 아무것도 읽지 않으므로 스트리밍 요청을 처리하지 않습니다.
from io import BytesIO
class WSGICopyBody(object):
def __init__(self, application):
self.application = application
def __call__(self, environ, start_response):
length = int(environ.get('CONTENT_LENGTH') or 0)
body = environ['wsgi.input'].read(length)
environ['body_copy'] = body
# replace the stream since it was exhausted by read()
environ['wsgi.input'] = BytesIO(body)
return self.application(environ, start_response)
app.wsgi_app = WSGICopyBody(app.wsgi_app)
request.environ['body_copy']