Content-Type 헤더에 관계없이 Python Flask에서 원시 POST 본문 가져오기
이전에 플라스크 요청에서 데이터를 받는 방법을 문의한 적이 있습니다.request.data
비어 있었습니다.그 대답은 설명했습니다.request.data
는 원시 포스트 본문이지만 폼 데이터를 구문 분석하면 비어 있습니다.어떻게 하면 무조건 생우편물을 받을 수 있습니까?
@app.route('/', methods=['POST'])
def parse_request():
data = request.data # empty in some cases
# always need raw data here, not parsed form data
내용 유형에 관계없이 원시 데이터를 가져오는 데 사용합니다.데이터가 캐시되고 나중에 액세스할 수 있습니다.request.data
,request.json
,request.form
멋대로
액세스하는 경우request.data
먼저, 그것은 부를 것입니다.get_data
먼저 폼 데이터를 구문 분석하는 인수를 사용합니다.요청에 양식 내용 유형이 있는 경우(multipart/form-data
,application/x-www-form-urlencoded
또는application/x-url-encoded
그러면 원시 데이터가 사용됩니다. request.data
그리고.request.json
이 경우 비어 있는 것으로 나타납니다.
request.stream
WSGI 서버가 응용 프로그램에 전달하는 원시 데이터 스트림입니다.일반적으로 원하는 경우에도 읽을 때 구문 분석이 수행되지 않습니다.request.get_data()
대신.
data = request.stream.read()
이전에 읽은 스트림은 비어 있습니다.request.data
또는 다른 속성.
저는 WSGI 미들웨어를 만들었습니다. 이 미들웨어에는environ['wsgi.input']
개울.WSGI 환경에서 액세스할 수 있도록 값을 저장했습니다.request.environ['body_copy']
내 앱 내에서.
이것은 Werkzeug 또는 Flask에서 필요하지 않습니다.request.get_data()
컨텐츠 유형에 관계없이 원시 데이터를 가져오지만 HTTP 및 WSGI 동작을 더 잘 처리합니다.
이렇게 하면 전체 본문이 메모리로 읽히는데, 이는 예를 들어 큰 파일이 게시된 경우 문제가 됩니다.만약 이것이 읽히지 않는다면 아무것도 읽지 않을 것입니다.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']
request.data
다음과 같은 경우 비어 있습니다.request.headers["Content-Type"]
양식 데이터로 인식되며, 이 데이터는 다음으로 구문 분석됩니다.request.form
내용 유형에 관계없이 원시 데이터를 가져오려면 다음을 사용합니다.request.get_data()
.
request.data
호출들request.get_data(parse_form_data=True)
폼 데이터에 대한 다른 동작이 발생합니다.
언급URL : https://stackoverflow.com/questions/10999990/get-raw-post-body-in-python-flask-regardless-of-content-type-header
'programing' 카테고리의 다른 글
Rails: 링크(URL)를 검증하는 좋은 방법은 무엇입니까? (0) | 2023.07.17 |
---|---|
URL에서 반환된 Zip 파일 다운로드 (0) | 2023.07.17 |
C 표준 라이브러리의 위치 (0) | 2023.07.17 |
문자열 벡터 입력을 사용하여 dplyr의 여러 열로 그룹화 (0) | 2023.07.17 |
파이썬 멀티프로세싱 모듈의 .join() 메서드는 정확히 무엇을 하고 있습니까? (0) | 2023.07.17 |