Python ile verimli ve normalinden kat ve kat hızlı istek gönderin
Giriş: Bazı işlemlerimiz için requests modülü yeterli olmayabilir. Tabii yeterli olup olmadığını anlamanız için işlemleriniz için thread kullanmayı deneyin. Fak
XIORXA
@xiorxaGiriş:
Bazı işlemlerimiz için requests modülü yeterli olmayabilir. Tabii yeterli olup olmadığını anlamanız için işlemleriniz için thread kullanmayı deneyin. Fakat bugünkü konumuz aiohttp ve httpx bu modüller gayet hızlıdırlar. Requests gibi modüllerin yetmediği zamanlarda sizler için güzel alternatifler olabilirler. Fakat kullanmadan önce dikkatli olun çünkü gönderilen çok fazla HTTP isteği "saldırıyor" gibi davranacaktır. Çok fazla istek tespit edilirse bazı web siteleri IP adresinizi yasaklayabilir... Vereceğim kodlar bu modüller için giriş kodları olacak ve aiohttp için bağlantıları sınırlamak için kod da vereceğim.
Aiohttp
Modülü indirin:
"pip install aiohttp"
"pip install asyncio"
import asyncio #modülleri dahil edin
import aiohttp
from aiohttp.client import ClientSession
async def main():
limit= aiohttp.TCPConnector(limit=10)
"""(sınır) aslında bu kod için gerek yok. Fakat bazen işlemleriniz için gerekli olabiliyor. Buradaki "limit=" kısmını istediğiniz gibi değiştirebilir ya da hiç kullanmazsınız size kalmış. Ancak bu kodu değişik şekillerde kullandığınız vakit mesela bu kodu kullanmadan(limit= aiohttp.TCPConnector(limit=10)) bir döngüye alırsanız saldırıyor gibi davranacak. Bu kötü bir durum."""
async with aiohttp.ClientSession(connector=limit) as session: #Yeni
async with session.get(' http://python.org ') as response: #url ve get isteği yapmak istiyoruz
print(response.status) #yanıtı alalım
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Httpx
Modülü indirin:
"pip install httpx"
"pip install asyncio"
Kullanımı basit olabilir bir taraftan requests modülüne benziyor:
import httpx
r = httpx.get(' https://bylge.com/ ')
print(r.status_code)
Diğer bir taraftan async desteği de bulunuyor.HTTPX, varsayılan olarak standart bir senkronize API sunar, ancak ihtiyacınız olursa size zaman uyumsuz bir istemci seçeneği de sunar. Bunu kullanmanızı öneriyorum.
import httpx
import asyncio
async def main():
async with httpx.AsyncClient() as client:
response = await client.get('https://www.python.org')
print(response)
asyncio.run(main())
İstekte bulunma - Httpx
response = await client.get(...) İstek yöntemlerinin tümü zaman uyumsuzdur, bu nedenle aşağıdakilerin tümü için stil kullanmalısınız :
AsyncClient.get(url, ...)
AsyncClient.options(url, ...)
AsyncClient.head(url, ...)
AsyncClient.post(url, ...)
AsyncClient.put(url, ...)
AsyncClient.patch(url, ...)
AsyncClient.delete(url, ...)
AsyncClient.request(method, url, ...)
AsyncClient.send(request, ...)
Published Date:
May 20, 2023
Updated Date:
December 02, 2023