Sebelumnya, saya bertanya Cara mendapatkan data yang diterima dalam permintaan Flask karena request.data
kosong. Jawabannya menjelaskan bahwa itu request.data
adalah badan posting mentah, tetapi akan kosong jika data formulir diuraikan. Bagaimana saya bisa mendapatkan postingan mentah tanpa syarat?
@app.route('/', methods=['POST'])
def parse_request():
data = request.data # empty in some cases
# always need raw data here, not parsed form data
request.stream
adalah aliran data mentah yang diteruskan ke aplikasi oleh server WSGI. Tidak ada penguraian yang dilakukan saat membacanya, meskipun Anda biasanya menginginkannyarequest.get_data()
.Aliran akan kosong jika sebelumnya dibaca oleh
request.data
atau atribut lain.sumber
Saya membuat middleware WSGI yang menyimpan bahan mentah dari
environ['wsgi.input']
sungai. Saya menyimpan nilai di lingkungan WSGI sehingga saya bisa mengaksesnya darirequest.environ['body_copy']
dalam aplikasi saya.Ini tidak diperlukan di Werkzeug atau Flask, karena
request.get_data()
akan mendapatkan data mentah terlepas dari jenis konten, tetapi dengan penanganan yang lebih baik dari perilaku HTTP dan WSGI.Ini membaca seluruh tubuh ke dalam memori, yang akan menjadi masalah jika misalnya file besar diposting. Ini tidak akan membaca apa pun jika
Content-Length
tajuk tidak ada, sehingga tidak akan menangani permintaan streaming.sumber
request.data
akan kosong jikarequest.headers["Content-Type"]
dikenali sebagai data formulir, yang akan diuraikan menjadirequest.form
. Untuk mendapatkan data mentah terlepas dari jenis konten, gunakanrequest.get_data()
.request.data
panggilanrequest.get_data(parse_form_data=True)
, yang menghasilkan perilaku berbeda untuk data formulir.sumber