از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش آپلود فایل ها با کتابخانه درخواست های پایتون
سرفصلهای مطلب
معرفی
Python توسط بسیاری از کتابخانه ها پشتیبانی می شود که انتقال داده ها را از طریق HTTP ساده می کنند. را requests
کتابخانه یکی از محبوبترین بستههای پایتون است که بهشدت در اسکرپینگ وب استفاده میشود. همچنین برای تعامل با سرورها محبوب است! این کتابخانه آپلود داده ها را با فرمت محبوبی مانند JSON آسان می کند، اما آپلود فایل ها را نیز آسان می کند.
در این آموزش به روش آپلود فایل ها با استفاده از پایتون می پردازیم requests
کتابخانه مقاله با پوشش دادن به آغاز خواهد شد requests
کتابخانه و post()
امضای تابع در مرحله بعد، روش آپلود یک فایل را با استفاده از requests
بسته بندی آخرین اما نه کم اهمیت، ما چندین فایل را در یک درخواست آپلود می کنیم.
آپلود یک فایل واحد با کتابخانه درخواست های پایتون
این آموزش روش ارسال فایل ها را پوشش می دهد، ما نگران روش ایجاد آنها نیستیم. برای پیگیری، سه فایل به نام ایجاد کنید my_file.txt
، my_file_2.txt
و my_file_3.txt
.
اولین کاری که باید انجام دهیم این است که ما را نصب کنیم request
کتابخانه در فضای کاری ما اگرچه لازم نیست، توصیه می شود کتابخانه ها را در یک محیط مجازی نصب کنید:
$ python3 -m venv .
محیط مجازی را فعال کنید تا دیگر بر نصب جهانی پایتون تأثیر نگذاریم:
$ . bin/activate
حالا بیایید نصب کنیم requests
کتابخانه با pip
:
$ pip install requests
یک فایل جدید به نام ایجاد کنید single_uploader.py
که کد ما را ذخیره می کند. در آن فایل، اجازه دهید با وارد کردن آن شروع کنیم requests
کتابخانه:
import requests
اکنون ما برای آپلود یک فایل تنظیم شده ایم! هنگام آپلود فایل، باید فایل را باز کنیم و محتوا را استریم کنیم. بالاخره ما نمی توانیم فایلی را که به آن دسترسی نداریم آپلود کنیم. ما این کار را با open()
تابع.
را open()
تابع دو پارامتر را می پذیرد: مسیر فایل و حالت. مسیر فایل می تواند یک مسیر مطلق یا یک مسیر نسبی به جایی که اسکریپت در حال اجرا است باشد. اگر فایلی را در همان دایرکتوری آپلود می کنید، فقط می توانید از نام فایل استفاده کنید.
آرگومان دوم، mode، مقدار “خواندن باینری” را می گیرد که با نمایش داده می شود rb
. این آرگومان به رایانه میگوید که میخواهیم فایل را در حالت خواندن باز کنیم و میخواهیم دادههای فایل را در قالب باینری مصرف کنیم:
test_file = open("my_file.txt", "rb")
توجه داشته باشید: خواندن فایل در حالت باینری مهم است. را requests
کتابخانه معمولاً تعیین می کند Content-Length
هدر، که مقداری بر حسب بایت است. اگر فایل در حالت بایت خوانده نشود، کتابخانه ممکن است مقدار نادرستی برای دریافت کند Content-Length
، که باعث ایجاد خطا در هنگام ارسال فایل می شود.
برای این آموزش، ما به رایگان درخواست می کنیم httpbin سرویس. این API به توسعه دهندگان اجازه می دهد تا درخواست های HTTP خود را آزمایش کنند. بیایید یک متغیر ایجاد کنیم که آدرس اینترنتی را که فایل های خود را در آن پست می کنیم ذخیره می کند:
test_url = "http://httpbin.org/post"
ما اکنون همه چیز برای ارائه درخواست داریم. ما استفاده خواهیم کرد post()
روش از requests
کتابخانه برای آپلود فایل برای انجام این کار به دو آرگومان نیاز داریم: URL سرور و files
ویژگی. ما همچنین پاسخ را در یک متغیر ذخیره می کنیم، کد زیر را بنویسید:
test_response = requests.post(test_url, files = {"form_field_name": test_file})
را files
اموال یک فرهنگ لغت می گیرد. کلید نام فیلد فرمی است که فایل را می پذیرد. مقدار بایت های فایل باز شده ای است که می خواهید آپلود کنید.
به طور معمول برای بررسی اینکه آیا شما post()
روش موفقیت آمیز بود، ما کد وضعیت HTTP پاسخ را بررسی می کنیم. ما می توانیم استفاده کنیم ok
ویژگی شی پاسخ، test_url
. اگر حقیقت داشته باشد، خواهیم کرد print پاسخ سرور HTTP را دریافت می کند، در این صورت این کار انجام می شود echo درخواست:
if test_response.ok:
print("Upload completed successfully!")
print(test_response.text)
else:
print("Something went wrong!")
بیایید آن را امتحان کنیم! در terminal، اسکریپت خود را با python
دستور:
python single_uploader.py
خروجی شما مشابه این خواهد بود:
Upload completed successfully!
{
"args": {},
"data": "",
"files": {
"form_field_name": "This is my file\nI like my file\n"
},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "189",
"Content-Type": "multipart/form-data; boundary=53bb41eb09d784cedc62d521121269f8",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.25.0",
"X-Amzn-Trace-Id": "Root=1-5fc3c190-5dea2c7633a02bcf5e654c2b"
},
"json": null,
"origin": "102.5.105.200",
"url": "http://httpbin.org/post"
}
به عنوان یک بررسی سلامت عقل، می توانید آن را تأیید کنید form_field_name
مقدار با آنچه در فایل شما است مطابقت دارد.
آپلود چندین فایل با پایتون درخواست ها کتابخانه
آپلود چندین فایل با استفاده از درخواست ها کاملا شبیه به یک فایل واحد است، با تفاوت عمده استفاده ما از لیست ها. یک فایل جدید به نام ایجاد کنید multi_uploader.py
و کد راه اندازی زیر:
import requests
test_url = "http://httpbin.org/post"
حالا یک متغیر به نام ایجاد کنید test_files
این یک فرهنگ لغت با چندین نام و فایل است:
test_files = {
"test_file_1": open("my_file.txt", "rb"),
"test_file_2": open("my_file_2.txt", "rb"),
"test_file_3": open("my_file_3.txt", "rb")
}
مانند قبل، کلیدها نام فیلدهای فرم و مقادیر فایل ها بر حسب بایت هستند.
همچنین میتوانیم متغیرهای فایلهایمان را بهعنوان فهرستی از تاپلها ایجاد کنیم. هر تاپل حاوی نام فیلد فرمی است که فایل را می پذیرد و به دنبال آن محتویات فایل بر حسب بایت آمده است:
test_files = (("test_file_1", open("my_file.txt", "rb")),
("test_file_2", open("my_file_2.txt", "rb")),
("test_file_3", open("my_file_3.txt", "rb")))
هر کدام کار می کند، بنابراین هر کدام را که ترجیح می دهید انتخاب کنید!
پس از آماده شدن لیست فایل ها، می توانید درخواست را ارسال کرده و پاسخ آن را مانند قبل بررسی کنید:
test_response = requests.post(test_url, files = test_files)
if test_response.ok:
print("Upload completed successfully!")
print(test_response.text)
else:
print("Something went wrong!")
این اسکریپت را با python
دستور:
$ python multi_uploader.py
این خروجی را خواهید دید:
Upload completed successfully!
{
"args": {},
"data": "",
"files": {
"test_file_1": "This is my file\nI like my file\n",
"test_file_2": "All your base are belong to us\n",
"test_file_3": "It's-a me, Mario!\n"
},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "470",
"Content-Type": "multipart/form-data; boundary=4111c551fb8c61fd14af07bd5df5bb76",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.25.0",
"X-Amzn-Trace-Id": "Root=1-5fc3c744-30404a8b186cf91c7d239034"
},
"json": null,
"origin": "102.5.105.200",
"url": "http://httpbin.org/post"
}
آفرین! شما می توانید یک فایل و چند فایل را با requests
!
نتیجه
در این مقاله روش آپلود فایل ها در پایتون با استفاده از requests
کتابخانه در جایی که یک فایل واحد یا چندین فایل باشد، تنها به چند ترفند با آن نیاز است post()
روش. ما همچنین برای اطمینان از موفقیت آمیز بودن آپلودهایمان، پاسخ خود را تأیید کردیم.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-13 17:33:04