Cosa indica un HTTP Error 429


Annunci:

(Tophost) l’ hosting web più economico – Usa il coupon sconto: 7NSS5HAGD5UC2

Annunci:

(Tophost) l’ hosting web più economico – Usa il coupon sconto: 7NSS5HAGD5UC2

L’errore HTTP con codice 429 (spesso accompagnato dalla dicitura Too Many Requests) è un codice di stato che indica che il client sta effettuando troppe richieste in un periodo di tempo troppo piccolo, causando il blocco della richiesta (request) originale. Too Many Requests indica in sostanza, mediante il codice 429, che ci sono un numero eccessivo di chiamate che il server non è in grado di gestire a monte, per cui il client si rifiuta di inviarne così tante ed il programmatore dovrà pertanto adeguarsi alla velocità indicata dal server stesso.

Come risolvere il problema

In genere in questi casi basta ridurre la frequenza di richieste effettuate in termini di chiamate HTTP, adeguandosi ai requisiti del server stesso.

Per saperne di più in tal senso, del resto, il campo header dal nome Retry-After potrebbe su alcune configurazioni indicare dopo quanto tempo sia lecito effettuare una nuova richiesta. Non si tratta, per queste ragioni, di un vero e proprio errore da risolvere (in senso stretto), ma semplicemente di una notifica in cui si invita a non sovrautilizzare le risorse del server.

Se state lavorando con la libreria requests di Python oppure con chiamate HTTP in PHP, Javascript e via dicendo, questo errore suggerisce di evitare di fare troppe richieste in poco tempo, perchè il vostro client non sarà comunque in grado di gestirle (e andranno in abort tutte le richieste eccessive che saranno automaticamente scartate, per inciso). Mi è capitato un errore del genere durante il tentativo di download di immagini e video da subreddit di Reddit, dove questa notifica è comparsa nel caso di un loop che provava a scansionare un subreddit e a estrarre le immagini ed i video che riusciva a trovare.

Questo tipo di codice di stato lato client si presenta in molti casi in questa veste che segue: HTTP 1.1, formato HTML, riprova dopo 3600 secondi ovvero il server può accettare massimo 1 richiesta ogni ora. Il campo Retry-After in alcuni casi potrebbe non essere specificato nell’header.

HTTP/1.1 429 Too Many Requests
Content-Type: text/html
Retry-After: 3600

Google returned a response with code 429 in python

Seguendo queste strategie, puoi gestire e risolvere efficacemente l’errore 429 in Python.

L’errore “Google returned a response with code 429” significa che l’applicazione ha superato il limite di richieste consentite da Google in un determinato periodo di tempo. Questo errore, noto anche come “Too Many Requests”, viene restituito quando si effettuano troppe richieste in un breve lasso di tempo e il server limita l’accesso per prevenire l’abuso.

Per risolvere questo problema in Python, ci sono diverse strategie che puoi adottare:

1. Implementare una logica di ripetizione con attesa esponenziale

Questa tecnica consiste nell’attendere per un intervallo di tempo crescente tra un tentativo e l’altro. Ad esempio, puoi attendere 1 secondo prima del primo tentativo, 2 secondi prima del secondo, 4 secondi prima del terzo, e così via.

import time
import requests

def make_request_with_retries(url, max_retries=5):
retries = 0
wait_time = 1 # tempo iniziale di attesa

while retries < max_retries:
response = requests.get(url)
if response.status_code == 200:
return response
elif response.status_code == 429:
print(f"Errore 429 ricevuto. Tentativo {retries + 1} di {max_retries}. Attesa di {wait_time} secondi.")
time.sleep(wait_time)
wait_time *= 2 # attesa esponenziale
retries += 1
else:
response.raise_for_status()

raise Exception(f"Max tentativi ({max_retries}) raggiunti con errore 429.")

url = 'https://example.com/api'
response = make_request_with_retries(url)
print(response.text)

2. Ridurre la frequenza delle richieste

Assicurati di non superare i limiti imposti riducendo il numero di richieste che invii in un determinato periodo di tempo. Questo può essere fatto utilizzando una funzione di ritardo fissa tra le richieste.

import time
import requests

def make_request_with_fixed_delay(url, delay=2):
response = requests.get(url)
if response.status_code == 429:
print("Errore 429 ricevuto. Attesa di 2 secondi.")
time.sleep(delay)
response = requests.get(url)
return response

url = 'https://example.com/api'
response = make_request_with_fixed_delay(url)
print(response.text)

3. Utilizzare una libreria per il rate-limiting

Puoi utilizzare librerie come ratelimit per implementare facilmente il rate-limiting nelle tue richieste.

import requests
from ratelimit import limits, sleep_and_retry

# Definire i limiti di richieste, ad esempio 10 richieste per minuto
ONE_MINUTE = 60

@sleep_and_retry
@limits(calls=10, period=ONE_MINUTE)
def call_api(url):
response = requests.get(url)
if response.status_code != 200:
raise Exception('API response: {}'.format(response.status_code))
return response

url = 'https://example.com/api'
response = call_api(url)
print(response.text)

4. Verificare e gestire le quote di API

Se stai utilizzando un’API con quote limitate, verifica le tue quote e gestisci correttamente le chiavi API. Potrebbe essere necessario richiedere un aumento delle quote se hai bisogno di effettuare più richieste.

Immagine di copertina generata da Midjourney

Annunci:

(Tophost) l’ hosting web più economico – Usa il coupon sconto: 7NSS5HAGD5UC2

👇 Da non perdere 👇



Questo sito web esiste da 4560 giorni (12 anni), e contiene ad oggi 4202 articoli (circa 3.361.600 parole in tutto) e 20 servizi online gratuiti. – Leggi un altro articolo a caso
Annunci:

(Tophost) l’ hosting web più economico – Usa il coupon sconto: 7NSS5HAGD5UC2

Privacy e termini di servizio / Cookie - Il nostro network è composto da Lipercubo , Pagare.online e Trovalost
Seguici su Telegram, ne vale la pena ❤️ ➡ @trovalost
Questo sito contribuisce alla audience di sè stesso.