Python ile verimli ve normalinden kat ve kat hızlı istek gönderin

May 20, 20232 dakika

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. 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, ...)





Küçük bir destek binlerce beğeniden daha değerlidir
https://bylge-images.s3-eu-west-1.amazonaws.com/09b65df0-faf9-11ec-8ff0-4f32c9b61146.png
XIORXA

Son mürcii halife, hekır ve yazılımcı

Bylge Icon
Bylge Icon