আমি একটি ডাব্লুএসজিআই মিডলওয়্যার তৈরি করেছি যা environ['wsgi.input']
স্ট্রিম থেকে কাঁচা দেহ সঞ্চয় করে । আমি ডাব্লুএসজিআই পরিবেশে মানটি সংরক্ষণ করেছি যাতে আমি এটি থেকে অ্যাক্সেস করতে পারিrequest.environ['body_copy']
আমার অ্যাপ্লিকেশন পারি।
ওয়ার্কজেগ বা ফ্লাস্কে এটি প্রয়োজনীয় নয়, যেমন request.get_data()
সামগ্রীর প্রকার নির্বিশেষে কাঁচা ডেটা পাবেন তবে এইচটিটিপি এবং ডাব্লুএসজিআই আচরণের আরও ভাল পরিচালনা করার সাথে।
এটি পুরো শরীরকে মেমরির মধ্যে পড়ে, যা উদাহরণস্বরূপ একটি বড় ফাইল পোস্ট করা হলে এটি একটি সমস্যা হবে। 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']