• 26-10-2023, 22:45:52
    #1
    Dostlar merhaba.

    Size birkac sorum olacak yardimci olursaniz sevinirim.

    Bekleme amaciyla programimda:
    from time import sleep
    sleep(1)

    kullaniyorum. Bu 1 saniye anlamina geliyor diye dusunuyorum.

    Sorum su:

    with requests.Session() as session:
        while not text:
            text= rex (hey, session)
            sleep(1)
    1 api kullaniyorum ve 1000 istek siniri var!
    Mantik olarak program While dongusunde 1 saniye bekledigi icin islem 1000 saniyede tamamlanacaktir. Dolayisiyla 1000 saniye / 60 saniye = 16.6 dakika yapiyor.

    Kisacasi 16.6 dakikada 1000 istek gonderiyorum ve her saniye 1 istek!
    Lakin Api panelinde dakika tuttum:

    16.6 dakikada 750 istek gonderilmis!
    Session() kullanmadan ise direk request modulu ile 500 istek ancak gonderebiliyorum.! Session request ile 750 cikti.


    Bende bir hesaplama yaptim
    sleep(0.65 yaptigimda karsiya 1037 istek gidiyor.)
    Buradaki tamam ve istek farki sundan mi kaynaklaniyor?

    1 saniye bekliyor ama istek atma ve istegin donme sureside var dogru muyum?

    PEKI SORUM SU:
    tam olarak bunu dakika tutmadan nasil hesaplayabilirim?
    Ornegin bir api diyor ki saniye 5 sorgu kabul ederim. Dolayisiyla 0.2 saniyede istek izni veriyor peki ben bilgisayarimda ne gibi bir islem yapabilirim ki karsiya her 2snde request gitsin?
    Sleep() zamanini nasil en ideal sekilde ayarliyabilirim? Sleep kaldirsak bu kez cok fazla olacak. Bu ideal oranlamayi bulabilmek icin ne yapabilirim?

    Her istekte +1 sayi yazdirsam o sekildede olcebilirim sanirim.
    Tabi bunun dakika tutmaktan farki yok.
    Toplam sorguyu gosteren modul gibi bise var mi?


    222222222222222222222 cok onemli sorum
    https://github.com/juancarlospaco/faster-than-requests
    faster than request kullanmistim calismamisti.
    peki session ile diger modulleri kullanabilirmiyim?
    Session()Urllib3 gibi
    Bu arada apiden veri almak icin request atiyorum ama Session hiz farki bariz. Bu bir web sitesi degil ama Session kullanmam dogrumudur yanlismidir bunuda bilmiyorum?
  • 26-10-2023, 22:55:16
    #2
    hocam ilk sorunuz için şöyle bir şey deneyebilirsiniz ama ne kadar isabetli sonuç verir bilmiyorum.

    Yapılan işlem şu bir isteğin kaç saniye sürdüğünü hesaplamak için şu yöntemi kullanın.

    with requests.Session() as session:
        while not text:
            start_time = time.time()  # Başlangıç zamanı alınır
            response = session.get(url)
            end_time = time.time()  # Bitiş zamanı alınır
    
            request_duration = end_time - start_time  # İstek süresi hesaplanır
    
            print(f"Istek {url} adresine {request_duration} saniye sürdü.")
    bu şekilde bir hesaplama yaparak belki yakın bir sonuç elde edebilirsiniz.
  • 31-10-2023, 22:03:41
    #3
    .Fiddler veya burpsuite gibi loclhostte proxy çalıştırıp istekleri localhost daki proxyden göndererek yapabilirsiniz.
    Ya da istek sonucunu her defasında kayıt altına alın, request headerine gereksiz bir key,value ekleyin ona göre kontrolleri sağlayabilirsiniz.

    Aşağıdaki kod chatgpt den

    import requests
    import threading
    
    # API URL'si
    api_url = 'https://example.com/api'
    
    # İstek gönderen işlev
    def send_request(thread_id):
    try:
    response = requests.get(api_url)
    # İstek sonucunu işleme veya yazdırma
    print(f'Thread {thread_id} - Response: {response.status_code}')
    except Exception as e:
    print(f'Thread {thread_id} - Error: {str(e)}')
    
    # İsteklerin sayısı
    request_count = 10
    
    # Thread'lerin listesi
    threads = []
    
    # Belirtilen sayıda thread oluştur
    for i in range(request_count):
    thread = threading.Thread(target=send_request, args=(i,))
    threads.append(thread)
    
    # Thread'leri başlat
    for thread in threads:
    thread.start()
    
    # Thread'lerin tamamlanmasını bekle
    for thread in threads:
    thread.join()
    
    print("Tüm işlemler tamamlandı.")

    Eğer requests kütüphanesi beni kesmiyor daha da hızlı bişeyler yapmak isitiyorum diyorsanız, socket kütüphanesi ile 80-443 portuna bağlanıp TCP üzerinde ham veriyi karşı tarafa kendiniz yazıp kendiniz alabilirsiniz. Ham veriyi işlemek meşakkatli olur ama hız kazanabilirsiniz belki...