আপনার কোনও ফাইল আপলোড করার প্রয়োজন নেই এমন সময়েও আপনাকে files
একটি বহুগুণ ফর্ম পোষ্ট অনুরোধ প্রেরণ করতে পরামিতিটি ব্যবহার করতে হবে।
মূল অনুরোধ উত্স থেকে:
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)
Plain সরল পাঠ্য ক্ষেত্রগুলির জন্য টিপলে প্রথম আর্গুমেন্ট হিসাবে নোট করুন 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')),
)
স্ট্রিমিং অনুরোধগুলি এপিআই
উপরে এপিআই তোমার জন্য pythonic যথেষ্ট নয়, তাহলে ব্যবহারের বিষয়ে বিবেচনা অনুরোধ toolbelt ( pip install requests_toolbelt
) যা একজন এক্সটেনশান কোর অনুরোধ মডিউল যে সেইসাথে স্ট্রিমিং ফাইল আপলোড করার জন্য সহায়তা প্রদান করে MultipartEncoder যা পরিবর্তে ব্যবহার করা যেতে পারে files
, এবং যা এছাড়াও দেয় আপনি পেলোডকে অভিধান, tuple বা তালিকা হিসাবে সংজ্ঞায়িত করেন।
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'),
)
)