آموزش کتابخانه Requests در پایتون (راهنمای عملی و سریع)

در دنیای امروز که اکثر سرویسها و پلتفرمها از طریق اینترنت با یکدیگر در ارتباط هستند، توانایی برقراری ارتباط با وبسایتها و دریافت یا ارسال دادهها، مهارتی حیاتی برای هر برنامهنویس پایتون محسوب میشود. زمانی که میخواهید اطلاعاتی را از یک سرویس ابری دریافت کنید یا به یک سیستم خاص دستوراتی ارسال کنید، به ابزاری نیاز دارید که این پروسه را به شکلی ساده، سریع و بدون پیچیدگیهای فنی اضافه برای شما انجام دهد. اینجا دقیقاً همان نقطهای است که کتابخانه Requests به میان میآید.
بسیاری از توسعهدهندگان در شروع مسیر خود ممکن است با روشهای دشوار و طولانی برای برقراری ارتباط با سرورها مواجه شوند که اغلب باعث دلسردی و هدر رفتن زمان میشود. با این حال، یادگیری کتابخانه Requests مانند باز کردن یک درِ بزرگ به روی دنیای وسیع دادههای آنلاین است. در این راهنما، قصد داریم بدون حاشیه و با زبانی ساده، تمام آنچه برای تسلط بر این ابزار نیاز دارید را بررسی کنیم.
نکته: در این بخش نیازی به استفاده از تصویر نیست، اما پیشنهاد میشود در انتها، لینک داخلی به مقالهی «آموزش مفاهیم پایه شبکه و HTTP» را قرار دهید تا کاربر پیشزمینه تئوری کافی داشته باشد.
کتابخانه Requests در پایتون چیست و چرا باید از آن استفاده کنیم؟
کتابخانه Requests یکی از محبوبترین و پرکاربردترین بستههای پایتون است که برای ارسال درخواستهای HTTP طراحی شده است. این ابزار به قدری قدرتمند و در عین حال ساده است که حتی شعار رسمی آن «HTTP برای انسانها» انتخاب شده است. در واقع، این کتابخانه با حذف پیچیدگیهای غیرضروری، به شما اجازه میدهد تا با نوشتن تنها چند خط کد، با هر سروری در سطح وب ارتباط برقرار کنید.
استفاده از این کتابخانه به شما این امکان را میدهد که دادههای سایتهای مختلف را استخراج کنید، با واسطهای برنامهنویسی (API) کار کنید و پروسههای خودکارسازی خود را به بهترین شکل ممکن پیادهسازی نمایید. مدیریت خودکار کوکیها، فشردهسازی محتوا، و مدیریت تایماوتها، تنها بخشی از قابلیتهایی است که این کتابخانه به صورت پیشفرض در اختیار شما قرار میدهد تا نیاز نباشد چرخ را از ابتدا اختراع کنید.
اگر بخواهیم در قالب یک جدول مقایسهای وضعیت آن را درک کنیم:
| ویژگی | کتابخانه Requests |
|---|---|
| سهولت استفاده | بسیار بالا |
| مدیریت خودکار کوکی | دارد |
تفاوت کتابخانه Requests با کتابخانه پیشفرض urllib
بسیاری از برنامهنویسان تازهکار میپرسند که چرا باید از کتابخانهای خارجی استفاده کرد وقتی پایتون به صورت پیشفرض ماژولی به نام urllib دارد؟ پاسخ کوتاه این است: خوانایی و کارایی. کتابخانه urllib اگرچه بسیار قدرتمند است، اما API آن بسیار پیچیده و طولانی است و برای کارهای ساده، شما را مجبور به نوشتن کدهای طولانی و غیربهینه میکند.
در مقابل، Requests بر پایه urllib ساخته شده اما رابط کاربری آن را به شکلی کاملاً انسانی بازطراحی کرده است. به عنوان مثال، برای ارسال یک درخواست ساده، در urllib شما باید چندین شیء مختلف ایجاد کنید، در حالی که در Requests همه چیز در یک متد خلاصه میشود. این یعنی کاهش خطاهای انسانی و سرعت بیشتر در توسعه پروژه.
علاوه بر این، مدیریت خطاهای شبکه در urllib بسیار دشوار است و نیاز به دانش عمیقتری دارد، اما در Requests، استثناهای پیشبینی شدهای وجود دارد که به شما کمک میکند در صورت بروز مشکل، دقیقاً بفهمید کجای مسیر ارتباطی ایراد دارد.
نصب و آمادهسازی کتابخانه Requests
برای شروع کار با Requests، اولین قدم نصب آن است. این کتابخانه در کتابخانههای استاندارد پایتون قرار ندارد، بنابراین باید از ابزار مدیریت پکیج پایتون یعنی pip استفاده کنید. نصب آن بسیار ساده است و تنها با اجرای یک دستور در ترمینال یا خط فرمان ویندوز انجام میشود. پیشنهاد میکنم همیشه از محیطهای مجازی (Virtual Environment) استفاده کنید تا کتابخانههای پروژههای مختلف با یکدیگر تداخل نداشته باشند.
برای نصب، ترمینال خود را باز کرده و دستور زیر را تایپ کنید:
بعد از اتمام مراحل نصب، میتوانید با وارد کردن (import) آن در فایل پایتون خود، از صحت نصب مطمئن شوید. کافی است در مفسر پایتون دستور import requests را بنویسید. اگر هیچ خطایی دریافت نکردید، یعنی همه چیز آماده است تا اولین درخواست خود را ارسال کنید.
در اینجا چند نکته کلیدی برای نصب موفق وجود دارد:
- اطمینان حاصل کنید که پایتون شما در Path ویندوز یا لینوکس قرار دارد.
- اگر از نسخههای مختلف پایتون استفاده میکنید، حتما از
pip3استفاده کنید. - در صورتی که در شبکه شرکت یا دانشگاه هستید، ممکن است نیاز به تنظیم Proxy برای دسترسی به مخازن پایتون (PyPI) داشته باشید.
در صورتی که با خطای Permission Denied مواجه شدید، میتوانید از سوئیچ --user استفاده کنید تا کتابخانه در دایرکتوری کاربری شما نصب شود، نه در دایرکتوری اصلی سیستم.
اولین قدم؛ ارسال درخواست GET برای دریافت اطلاعات
پرکاربردترین عملیات در دنیای وب، دریافت اطلاعات از یک سرور است که با استفاده از متد HTTP GET انجام میشود. در کتابخانه Requests، این کار با استفاده از متد requests.get() انجام میگیرد. به محض فراخوانی این متد، کتابخانه یک شیء پاسخ (Response Object) به شما باز میگرداند که حاوی تمامی اطلاعات ارسال شده توسط سرور، شامل بدنه محتوا، وضعیت درخواست و سربرگها (Headers) است.
برای شروع کافیست آدرس URL مورد نظر خود را به این متد بدهید. در پشت صحنه، Requests تمام هدرهای استاندارد را تنظیم میکند تا سرور به درستی درخواست شما را پردازش کند. این سادگی به شما اجازه میدهد تا بدون درگیر شدن با مفاهیم پیچیده شبکه، مستقیماً روی تحلیل دادههایی که دریافت میکنید تمرکز داشته باشید.
مثالی از نحوه ارسال یک درخواست ساده به این صورت است:
تحلیل پاسخ (Response) دریافتی؛ کدهای وضعیت و محتوا
پس از دریافت شیء پاسخ، مهمترین بخش کار تحلیل آن است. کد وضعیت (Status Code) یکی از حیاتیترین پارامترهاست که نشان میدهد آیا درخواست شما موفقیتآمیز بوده است یا خیر. برای مثال، کد ۲۰۰ به معنای موفقیت است، در حالی که کد ۴۰۴ به معنای یافت نشدن صفحه است. علاوه بر کد وضعیت، شما میتوانید به متن خام محتوا یا دادههای JSON دسترسی داشته باشید.
شما میتوانید با استفاده از متدهای .text برای دریافت رشته متنی و .json() برای تبدیل مستقیم پاسخ به دیکشنریهای پایتون، به محتوای دریافتی دسترسی پیدا کنید. این ویژگی یکی از بزرگترین مزیتهای استفاده از این کتابخانه برای کار با سرویسهای RESTful است، چرا که تبدیل خودکار دادههای JSON به آبجکتهای پایتون، زمان برنامهنویسی را به شدت کاهش میدهد.
برای اطمینان از سلامت درخواست، میتوانید از متد response.raise_for_status() استفاده کنید. این متد در صورتی که درخواست شما با خطای سمت سرور یا کلاینت مواجه شده باشد، یک استثنا (Exception) صادر میکند که به شما اجازه میدهد خطا را در بلوک try-except مدیریت کنید.
ارسال پارامترها در درخواستهای GET
بسیاری از مواقع، دریافت داده از یک URL ساده کافی نیست و شما نیاز دارید اطلاعات خاصی را (مانند کلمات جستجو یا فیلترهای زمانی) به سرور ارسال کنید. این کار معمولاً از طریق پارامترهای کوئری (Query Parameters) انجام میشود که در انتهای URL قرار میگیرند. به جای اینکه رشته URL را به صورت دستی و با ترکیب کاراکترها بسازید، Requests این کار را به صورت امن و استاندارد انجام میدهد.
شما میتوانید یک دیکشنری از پارامترهای مورد نظر خود تعریف کرده و آن را به آرگومان params در متد get پاس دهید. این کتابخانه به طور خودکار دیکشنری شما را به فرمت صحیح URL تبدیل میکند و کاراکترهای خاص را برای شما انکود (Encode) میکند تا در مسیر انتقال مشکلی پیش نیاید. این روش نه تنها خوانایی کد شما را افزایش میدهد بلکه از بروز خطاهای رایج در رشتهسازی جلوگیری میکند.
در اینجا مثالی از نحوه ارسال پارامترها مشاهده میکنید:
در مثال فوق، کتابخانه به طور خودکار URL نهایی را به صورت https://httpbin.org/get?key1=value1&key2=value2 میسازد. این رویکرد در زمان کار با APIهای جستجو یا فیلتر کردن دادهها بسیار کاربردی است. پیشنهاد میکنم برای پروژههای واقعی، همیشه لیست پارامترها را در یک دیکشنری مجزا تعریف کنید تا مدیریت آنها در آینده آسانتر باشد و اگر نیاز بود پارامتر جدیدی اضافه کنید، نیازی به تغییر کل URL نداشته باشید.
ارسال دادهها به سرور با درخواست POST
در حالی که متد GET برای دریافت اطلاعات استفاده میشود، متد POST ابزار اصلی شما برای ارسال دادههای جدید به سرور یا تغییر وضعیت در سمت سرور است. این روش زمانی کاربرد دارد که میخواهید فرمی را ارسال کنید، فایلی آپلود کنید یا دیتای جدیدی در یک دیتابیس آنلاین ثبت نمایید. برخلاف GET که پارامترها را در URL نمایش میدهد، در POST دادهها درون بدنه (Body) درخواست قرار میگیرند که این کار امنیت و ظرفیت بیشتری را برای انتقال اطلاعات فراهم میکند.
برای ارسال درخواست POST در کتابخانه Requests، از متد requests.post() استفاده میشود. این متد بسیار شبیه به get عمل میکند، با این تفاوت که آرگومان اصلی آن data (برای دادههای فرم) یا json (برای دادههای با ساختار JSON) نام دارد. در ادامه به بررسی دقیقتر این دو حالت پرکاربرد میپردازیم.
همیشه به یاد داشته باشید که هنگام استفاده از POST، نوع دادهای که ارسال میکنید (Content-Type) برای سرور بسیار مهم است. کتابخانه Requests به صورت هوشمند این هدر را تنظیم میکند، اما درک تفاوت بین ارسال فرم و JSON به شما کمک میکند تا با سرورهای مختلف به درستی ارتباط برقرار کنید.
ارسال دادهها به صورت فرم (Form Data)
بسیاری از سرویسهای وب قدیمیتر یا فرمهای HTML، دادهها را به صورت استاندارد application/x-www-form-urlencoded میپذیرند. این همان فرمتی است که مرورگرها هنگام سابمیت کردن یک فرم در وبسایتها از آن استفاده میکنند. برای ارسال این نوع داده، کافیست یک دیکشنری پایتونی شامل جفتهای کلید-مقدار ایجاد کرده و آن را به پارامتر data در متد post بدهید.
به عنوان مثال، برای ورود به یک سیستم یا ارسال یک کامنت در سایت، کد شما به صورت زیر خواهد بود:
در این حالت، کتابخانه دادههای شما را به رشتهای از فرمتهای key=value تبدیل کرده و با هدر صحیح ارسال میکند. این روش برای سادهترین سناریوهای تعامل با فرمهای وب بسیار عالی عمل میکند و کمترین میزان تنظیمات را نیاز دارد.
ارسال دادهها در قالب JSON
در دنیای مدرن توسعه وب و APIهای مبتنی بر REST، استاندارد طلایی برای تبادل اطلاعات، فرمت JSON است. اگر سرویسی که با آن کار میکنید انتظار دریافت دادههای ساختاریافته را دارد، نباید از data استفاده کنید، بلکه باید از پارامتر json بهره ببرید. این کار باعث میشود هدر Content-Type به صورت خودکار روی application/json تنظیم شود که برای اکثر APIهای امروزی ضروری است.
استفاده از این متد بسیار تمیز و خوانا است:
مزیت اصلی این روش این است که نیازی نیست نگران تبدیل دیکشنری به رشته JSON باشید؛ کتابخانه Requests این مرحله را به صورت داخلی مدیریت میکند. این موضوع احتمال بروز خطاهای سینتکسی در ساختارهای پیچیده JSON را به حداقل میرساند. اگر در حال توسعه یک سیستم اتوماسیون یا ارتباط با سرویسهای ابری هستید، استفاده از پارامتر json همیشه انتخاب اول شما باید باشد.