당신은 사용할 필요가 files
멀티 파트 폼 POST 요청을 보낼 매개 변수를 심지어 어떤 파일을 업로드 할 필요가 없습니다.
원래 요청 소스에서 :
def request(method, url, **kwargs):
"""Constructs and sends a :class:`Request <Request>`.
...
:param files: (optional) Dictionary of ``'name': file-like-objects``
(or ``{'name': file-tuple}``) for multipart encoding upload.
``file-tuple`` can be a 2-tuple ``('filename', fileobj)``,
3-tuple ``('filename', fileobj, 'content_type')``
or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``,
where ``'content-type'`` is a string
defining the content type of the given file
and ``custom_headers`` a dict-like object
containing additional headers to add for the file.
관련 부분은 다음과 같습니다 file-tuple can be a
2-tuple
, .3-tuple
or a
4-tuple
위의 내용을 기반으로 업로드 할 파일과 양식 필드를 모두 포함하는 가장 간단한 멀티 파트 양식 요청은 다음과 같습니다.
multipart_form_data = {
'file2': ('custom_file_name.zip', open('myfile.zip', 'rb')),
'action': (None, 'store'),
'path': (None, '/path1')
}
response = requests.post('https://httpbin.org/post', files=multipart_form_data)
print(response.content)
☝ 일반 텍스트 필드의 튜플에서 첫 번째 인수로 주목하십시오. None
파일 업로드에만 사용되는 파일 이름 필드의 자리 표시 자이지만 None
데이터를 제출하기 위해 첫 번째 매개 변수로 전달 되는 텍스트 필드의 경우 .
이름이 같은 여러 필드
사전 대신 동일한 이름으로 여러 필드를 게시해야하는 경우 페이로드를 튜플 목록 (또는 튜플)으로 정의 할 수 있습니다.
multipart_form_data = (
('file2', ('custom_file_name.zip', open('myfile.zip', 'rb'))),
('action', (None, 'store')),
('path', (None, '/path1')),
('path', (None, '/path2')),
('path', (None, '/path3')),
)
스트리밍 요청 API
위의 API는 당신을위한 파이썬 정도가 아닌 경우, 사용을 고려 요청이 툴 벨트 ( pip install requests_toolbelt
의 확장 인) 의 핵심 요구는 그 파일 업로드가뿐만 아니라 스트리밍에 대한 지원을 제공하는 모듈 MultipartEncoder 대신 사용할 수 있습니다 files
, 어느도 있습니다 페이로드를 사전, 튜플 또는 목록으로 정의합니다.
MultipartEncoder
실제 업로드 필드가 있거나없는 멀티 파트 요청에 모두 사용될 수 있습니다. data
매개 변수에 지정되어야합니다 .
import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
multipart_data = MultipartEncoder(
fields={
# a file upload field
'file': ('file.zip', open('file.zip', 'rb'), 'text/plain')
# plain text fields
'field0': 'value0',
'field1': 'value1',
}
)
response = requests.post('http://httpbin.org/post', data=multipart_data,
headers={'Content-Type': multipart_data.content_type})
동일한 이름을 가진 여러 필드를 보내거나 양식 필드의 순서가 중요한 경우 사전 대신 튜플 또는 목록을 사용할 수 있습니다.
multipart_data = MultipartEncoder(
fields=(
('action', 'ingest'),
('item', 'spam'),
('item', 'sausage'),
('item', 'eggs'),
)
)