کتابخانه Requests یکی از بخش جدایی ناپذیر پایتون برای ایجاد درخواست های HTTP به یک URL مشخص است. از کتابخانه requests برای ارسال درخواست به REST API یا صفحات وب استفاده میشود. همچنین در زمان Web Scrapping میتوانید از ماژول requests پایتون استفاده کنید. هنگامی که با requests یک درخواست به یک URI ارسال میکنید، یک پاسخ را برمی گرداند. ماژول requests پایتون توابع داخلی برای مدیریت درخواست و پاسخ ارائه می دهد.
کتابخانه Requests یک API ساده برای تعامل با عملیات HTTP مانند GET، POST و غیره فراهم می کند. همچنین از ارسال اطلاعات اضافی به سرور وب از طریق پارامترها و هدرها، رمزگذاری پاسخ سرور، شناسایی خطاها و مدیریت تغییر مسیرها پشتیبانی می کند. کتابخانه Requests علاوه بر سادهسازی نحوه کار با عملیات HTTP، برخی از ویژگیهای پیشرفته مانند مدیریت استثناهای HTTP و احراز هویت را ارائه میکند که در این آموزش به آنها خواهیم پرداخت.
پروتکل http چیست؟
پروتکل انتقال ابرمتن (HTTP) یک پروتکل درخواست/پاسخ مبتنی بر معماری سرویس گیرنده-سرور است که برای تبادل پیامهای درخواست و پاسخ به اتصالات TCP/IP متکی است. کلاینتهای HTTP مانند مرورگرهای وب یا برنامههای تلفن همراه درخواستهایی را به سرور HTTP ارسال میکنند و سرور با پیامهایی حاوی خط وضعیت، سرصفحه و بدنه به آنها پاسخ میدهد. برای اطلاعات بیشتر میتوانید ویدیو آموزش پروتکل HTTP را مشاهده کنید.
نصب کتابخانه requests پایتون
قبل از شروع به کار با کتابخانه requests پایتون، ابتدا باید آن را نصب کنید. برای نصب کتابخانه requests پایتون با ابزار pip، دستور زیر را در ترمینال وارد کنید:
pip install requests
کتابخانه requests به طور فعال توسط جامعه بزرگی از برنامه نویسان توسعه پیدا میکند. سورس کد این کتابخانه در گیتهاب نگهداری می شود. برای دریافت سورس کد کتابخانه requests میتوانید دستور زیر را وارد کنید:
git clone git://github.com/psf/requests.git
ارسال درخواست با کتابخانه requests پایتون
ارسال درخواست http با ماژول requests پایتون بسیار ساده است. در قدم اول این کتابخانه را ایمپورت کنید:
>>> import requests
حالا میتوانید درخواست های خود را ارسال کنید. در کد زیر یک درخواست GET به صفحه اصلی وبسایت ویکی پدیا ارسال میکنیم:
>>> r = requests.get('wikipedia.org/')
بعد از این که درخواست را ارسال کردید یک آبجکت Response به شما برگشت داده میشود که حاوی اطلاعات url درخواست شده است.
کتابخانه requests متدهای مختلفی برای ارسال انواع درخواست http دارد. به طور مثال اگر بخواهید یک درخواست POST ارسال کنید، میتوانید به شکل زیر کار کنید:
>>> r = requests.post('wikipedia.org/')
بسیار ساده است. همچنین بقیه متدهای http نیز به شرح زیر هستند:
>>> r = requests.put('wikipedia.org/')
>>> r = requests.delete('wikipedia.org/')
>>> r = requests.head('wikipedia.org/')
>>> r = requests.options('wikipedia.org/')
بعد از ارسال درخواست و گرفتن پاسخ میتوانید به اطلاعات صفحه درخواست شده دسترسی داشته باشید. میتوانید با استفاده از تابع dir پایتون تمام اطلاعاتی که در آبجکت Response وجود دارد را ببینید:
>>> dir(r)
['__attrs__', '__bool__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__nonzero__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_content', '_content_consumed', '_next', 'apparent_encoding', 'close', 'connection', 'content', 'cookies', 'elapsed', 'encoding', 'headers', 'history', 'is_permanent_redirect', 'is_redirect', 'iter_content', 'iter_lines', 'json', 'links', 'next', 'ok', 'raise_for_status', 'raw', 'reason', 'request', 'status_code', 'text', 'url']
میتوانید از این پاسخ برای دسترسی به اطلاعات مورد نیاز استفاده کنید. مثلا برای دسترسی به آدرس درخواست شده:
>>> r.url
https://www.wikipedia.org/
و یا برای دسترسی به کد وضعیت درخواست:
>>> r.status_code
200
همیچنین برای دسترسی به سورس کد صفحه میتوانید به شکل زیر کار کنید:
>>> r.text
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
...
...
...
ارسال پارامتر در URL با کتابخانه requests پایتون
در بسیاری از مواقع نیاز است که در کنار درخواست خود چند پارامتر نیز ارسال کنید. اگر URL را به صورت دستی میسازید این پارامترها به صورت جفت key-value پس از علامت سوال قرار میگیرند. کتابخانه requests به شما اجازه میدهد این پارامترها را به عنوان یک دیکشنری تحت عنوان params ارسال کنید. به عنوان مثال:
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
میتوانید با چاپ کردن URL از درستی این پارامترها مطمئن شوید:
>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1
دقت کنید که اگر در دیکشنری مقدار یک کلید None باشد، در URL قرار نمیگیرد. همچنین میتوانید لیستی از آیتم ها را نیز ارسال کنید:
>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
>>> r = requests.get('https://httpbin.org/get', params=payload)
>>> print(r.url)
https://httpbin.org/get?key1=value1&key2=value2&key2=value3
ارسال نظر