استفاده از Requests برای ارسال درخواست HTTP در پایتون

استفاده از Requests برای ارسال درخواست HTTP در پایتون

در دنیای امروز، اتوماسیون و اسکریپت‌نویسی نقش حیاتی در انجام وظایف تکراری و جمع‌آوری داده‌ها از وب ایفا می‌کنند. یکی از ابزارهای قدرتمند در پایتون برای تعامل با وب، کتابخانه Requests است. این کتابخانه به شما امکان می‌دهد به سادگی درخواست‌های HTTP (مانند GET، POST، PUT، DELETE و غیره) را ارسال کرده و پاسخ‌های دریافتی را پردازش کنید. این مقاله به بررسی جامع کتابخانه Requests، نحوه نصب، مفاهیم کلیدی و کاربردهای عملی آن می‌پردازد.

مقدمه‌ای بر HTTP و Requests

HTTP (Hypertext Transfer Protocol) پروتکلی است که ارتباط بین مرورگرهای وب و سرورها را برقرار می‌کند. وقتی شما یک آدرس وب را در مرورگر خود وارد می‌کنید، مرورگر یک درخواست HTTP به سرور ارسال می‌کند و سرور در پاسخ، داده‌های مورد نیاز (مانند HTML، CSS، JavaScript و تصاویر) را برمی‌گرداند.

کتابخانه Requests در پایتون، فرآیند ارسال این درخواست‌ها و دریافت پاسخ‌ها را بسیار ساده می‌کند. قبل از Requests، انجام این کارها با استفاده از کتابخانه urllib پیچیده‌تر بود. Requests با ارائه یک API ساده و کاربرپسند، توسعه‌دهندگان را قادر می‌سازد تا به سرعت و به آسانی با وب تعامل داشته باشند.

نصب Requests

برای استفاده از Requests، ابتدا باید آن را نصب کنید. این کار را می‌توان به راحتی با استفاده از pip، مدیر بسته پایتون، انجام داد. در خط فرمان یا ترمینال خود، دستور زیر را وارد کنید:

pip install requests

پس از اتمام نصب، می‌توانید Requests را در اسکریپت‌های پایتون خود import کنید:

import requests

انواع درخواست‌های HTTP و نحوه ارسال آن‌ها با Requests

Requests از تمام انواع اصلی درخواست‌های HTTP پشتیبانی می‌کند. در ادامه، نحوه ارسال هر یک از این درخواست‌ها را بررسی می‌کنیم:

درخواست GET

درخواست GET برای دریافت داده‌ها از یک سرور استفاده می‌شود. به عنوان مثال، وقتی یک صفحه وب را باز می‌کنید، مرورگر شما یک درخواست GET به سرور ارسال می‌کند.

import requests

response = requests.get('https://www.example.com')

print(response.status_code)
print(response.text)

در این مثال، `requests.get()` یک درخواست GET به آدرس `https://www.example.com` ارسال می‌کند. متغیر `response` حاوی پاسخ دریافتی از سرور است. `response.status_code` کد وضعیت HTTP را نشان می‌دهد (به عنوان مثال، 200 برای موفقیت، 404 برای یافت نشدن و غیره). `response.text` محتوای پاسخ را به صورت رشته‌ای برمی‌گرداند.

درخواست POST

درخواست POST برای ارسال داده‌ها به یک سرور استفاده می‌شود. به عنوان مثال، وقتی یک فرم را در یک وب‌سایت پر می‌کنید و آن را ارسال می‌کنید، مرورگر شما یک درخواست POST به سرور ارسال می‌کند.

import requests

data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://httpbin.org/post', data=data)

print(response.status_code)
print(response.json())

در این مثال، `requests.post()` یک درخواست POST به آدرس `https://httpbin.org/post` ارسال می‌کند. پارامتر `data` حاوی داده‌هایی است که می‌خواهید به سرور ارسال کنید. `response.json()` محتوای پاسخ را به صورت یک دیکشنری پایتون برمی‌گرداند (اگر پاسخ JSON باشد).

درخواست‌های PUT، DELETE و PATCH

Requests همچنین از درخواست‌های PUT، DELETE و PATCH پشتیبانی می‌کند. این درخواست‌ها برای به‌روزرسانی و حذف داده‌ها در سرور استفاده می‌شوند. نحوه استفاده از این درخواست‌ها مشابه درخواست‌های GET و POST است:

import requests

# PUT
response = requests.put('https://httpbin.org/put', data={'key': 'value'})

# DELETE
response = requests.delete('https://httpbin.org/delete')

# PATCH
response = requests.patch('https://httpbin.org/patch', data={'key': 'value'})

پارامترهای درخواست

می‌توانید پارامترها را به درخواست‌های خود اضافه کنید تا داده‌های اضافی را به سرور ارسال کنید. برای درخواست‌های GET، پارامترها را می‌توان به صورت رشته‌ای به URL اضافه کرد یا از پارامتر `params` در `requests.get()` استفاده کرد.

import requests

# روش اول: اضافه کردن پارامترها به URL
response = requests.get('https://httpbin.org/get?key1=value1&key2=value2')

# روش دوم: استفاده از پارامتر params
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)

برای درخواست‌های POST، PUT و PATCH، پارامترها را می‌توان با استفاده از پارامتر `data` ارسال کرد (همانطور که در مثال‌های قبلی نشان داده شد).

هدرهای درخواست

هدرها اطلاعات اضافی در مورد درخواست را ارائه می‌دهند. می‌توانید هدرهای سفارشی را به درخواست‌های خود اضافه کنید با استفاده از پارامتر `headers` در توابع `requests.get()`, `requests.post()`, `requests.put()`, `requests.delete()` و `requests.patch()`.

import requests

headers = {'User-Agent': 'My Custom User Agent'}
response = requests.get('https://www.example.com', headers=headers)

مدیریت خطاها

هنگام ارسال درخواست‌های HTTP، ممکن است با خطاها مواجه شوید. Requests به شما امکان می‌دهد این خطاها را به راحتی مدیریت کنید. می‌توانید از بلوک‌های `try…except` برای گرفتن استثنائات `requests.exceptions` استفاده کنید.

import requests

try:
    response = requests.get('https://www.example.com', timeout=5)
    response.raise_for_status()  # Raises HTTPError for bad responses (4xx or 5xx)
    print(response.text)
except requests.exceptions.RequestException as e:
    print(f"Error: {e}")

`response.raise_for_status()` یک استثنا را در صورت دریافت کد وضعیت HTTP ناموفق (4xx یا 5xx) ایجاد می‌کند. `requests.exceptions.RequestException` یک کلاس پایه برای تمام استثنائات Requests است.

استفاده از Session

اگر نیاز به ارسال چندین درخواست به یک سرور دارید، می‌توانید از یک Session استفاده کنید. Session به شما امکان می‌دهد کوکی‌ها، هدرها و سایر تنظیمات را بین درخواست‌ها حفظ کنید.

import requests

session = requests.Session()
session.headers.update({'User-Agent': 'My Custom User Agent'})

response1 = session.get('https://www.example.com')
response2 = session.post('https://httpbin.org/post', data={'key': 'value'})

print(response1.status_code)
print(response2.status_code)

نتیجه‌گیری

کتابخانه Requests یک ابزار قدرتمند و آسان برای استفاده برای ارسال درخواست‌های HTTP در پایتون است. با استفاده از Requests، می‌توانید به راحتی با وب تعامل داشته باشید، داده‌ها را جمع‌آوری کنید و وظایف خود را به صورت خودکار انجام دهید. این مقاله به شما یک درک جامع از مفاهیم کلیدی Requests و نحوه استفاده از آن در اسکریپت‌های پایتون ارائه داد. با تمرین و آزمایش، می‌توانید از تمام قابلیت‌های Requests برای حل مشکلات خود استفاده کنید.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *