در دنیای توسعه وب و APIها با پایتون، انتخاب یک کتابخانه HTTP کلاینت خوب میتونه تفاوت زیادی در عملکرد، سادگی کد و مصرف منابع ایجاد کنه. کتابخانههای معروفی مثل requests، httpx و aiohttp سالهاست که محبوب هستن، اما اگر به دنبال چیزی سبکتر، سریعتر و با وابستگیهای کمتر هستید، fasthttp گزینهای عالیه که اخیراً توجه زیادی رو جلب کرده.
fasthttp یک کتابخانه HTTP/1.1 کلاینت سبک و سریع برای پایتون هست که هم API synchronous (همزمان) و هم asynchronous (ناهمزمان) رو در یک رابط واحد ارائه میده. این کتابخانه روی h11 (یک پیادهسازی خالص پایتون از پروتکل HTTP) ساخته شده و تمرکز اصلیش روی سرعت، قابلیت گسترش و حداقل وابستگیها هست.
API واحد برای sync و async: بدون نیاز به تغییر کد، میتونید هم به صورت synchronous و هم asynchronous ازش استفاده کنید. (مشابه httpx اما سبکتر)
Connection Pooling: اتصالات رو reuse میکنه تا throughput بالاتری داشته باشید.
پشتیبانی خودکار از فشردهسازی: gzip به صورت پیش فرض، و brotli اختیاری.
Streaming: برای دانلود فایلهای بزرگ بدون مصرف حافظه زیاد.
JSON Handling خودکار: پاسخهای JSON رو به طور خودکار decode میکنه.
Timeoutهای قابل تنظیم: کنترل دقیق روی timeout اتصال و خواندن.
Retry و Exponential Backoff: سیاستهای retry هوشمند برای مدیریت خطاها.
Circuit Breaker اختیاری: جلوگیری از شکستهای زنجیرهای.
مدیریت Cookie: پشتیبانی کامل از Cookie Jar.
وابستگیهای minimal: فقط h11 اصلی، بدون بار اضافی.
این ویژگیها باعث میشن fasthttp برای پروژههای web scraping، API clientها، میکروسرویسها و هر جایی که نیاز به درخواستهای HTTP سریع و کارآمد داره، ایدهآل باشه.
requests: ساده و محبوب، اما فقط synchronous و سنگینتر (بر پایه urllib3).
httpx: مشابه fasthttp در API واحد sync/async، اما وابستگیهای بیشتر و کمی سنگینتر.
aiohttp: خیلی سریع در حالت async، اما فقط asynchronous و نیاز به کد بیشتر برای مدیریت.
fasthttp با تمرکز روی minimalism، در بسیاری از سناریوها سرعت بالاتر و مصرف منابع کمتری نسبت به رقبا نشون میده، به خصوص وقتی که به دنبال یک کلاینت سبک با ویژگیهای کامل هستید.
نصب خیلی سادهست:
pip install -U pyfasthttp
برای پشتیبانی از brotli:
pip install -U brotli
from fasthttp import Client from fasthttp.timeouts import Timeout with Client(timeout=Timeout(connect=5, read=10)) as client: resp = client.get("https://httpbin.org/get") print(resp.status_code) print(resp.json())
import asyncio from fasthttp import Client async def main(): async with Client() as client: resp = await client.get("https://httpbin.org/get") print(resp.json()) asyncio.run(main())
with Client() as client: resp = client.get("https://httpbin.org/stream/20", stream=True) for chunk in resp.iter_bytes(): print(f"دریافت چانک: {len(chunk)} بایت")
اگر پروژهتون نیاز به یک HTTP کلاینت سریع، سبک و انعطافپذیر داره، fasthttp میتونه انتخاب بهتری نسبت به گزینههای سنگینتر باشه. با وابستگیهای کم، شروع سریع و ویژگیهای پیشرفته، این کتابخانه داره به سرعت رشد میکنه و ارزش یک نگاه رو داره.
به گیتهاب پروژه سر بزنید، star بدید و اگر ایدهای داشتید، contribute کنید! 🚀
#پایتون #Python #HTTP #کتابخانه_پایتون #fasthttp #وب_اسکریپینگ #API #برنامه_نویسی