وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

روش آپلود فایل ها با کتابخانه درخواست های پایتون

0 147
زمان لازم برای مطالعه: 4 دقیقه


معرفی

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

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید