Herhangi bir dosya yüklemeniz gerekmediğinde bilefiles çok bölümlü bir POST isteği göndermek için parametreyi kullanmanız gerekir.
Orijinal istekler kaynağından:
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.
İlgili bölüm: file-tuple can be a2-tuple, .3-tupleor a4-tuple
Yukarıdakilere dayanarak, hem yüklenecek dosyaları hem de form alanlarını içeren en basit çok parçalı form isteği aşağıdaki gibi görünecektir:
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)
☝ Not Nonedüz metin alanları için başlığın ilk argüman olarak - bu sadece dosya yüklemeleri için kullanılan dosya adı alanı için bir yer tutucudur ama geçen metin alanları için Noneveri sunulacak için ilk parametre olarak gereklidir .
Aynı ada sahip birden çok alan
Aynı ada sahip birden fazla alanı yayınlamanız gerekiyorsa, sözlük yerine yükünüzü bir grup listesi (veya bir demet) olarak tanımlayabilirsiniz:
multipart_form_data = (
('file2', ('custom_file_name.zip', open('myfile.zip', 'rb'))),
('action', (None, 'store')),
('path', (None, '/path1')),
('path', (None, '/path2')),
('path', (None, '/path3')),
)
Akış istekleri API'sı
Yukarıdaki API sizin için pythonic yeterli değilse, o zaman kullanmayı düşünün istekleri toolbelt ( pip install requests_toolbeltbir uzantısı olan) çekirdek istekleri bu dosya, yükleme yanı sıra Akış için destek sağlar modülü MultipartEncoder yerine kullanılabilir filesve hangi zamanda sağlar yükü sözlük, grup veya liste olarak tanımlarsınız.
MultipartEncoderhem gerçek yükleme alanları olan veya olmayan çok parçalı istekler için kullanılabilir. dataParametreye atanmalıdır .
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})
Aynı ada sahip birden çok alan göndermeniz gerekiyorsa veya form alanlarının sırası önemliyse, sözlük yerine bir demet veya liste kullanılabilir:
multipart_data = MultipartEncoder(
fields=(
('action', 'ingest'),
('item', 'spam'),
('item', 'sausage'),
('item', 'eggs'),
)
)