117 votes

Pourquoi requests.get() ne revient-il pas ? Quel est le délai d'attente par défaut utilisé par requests.get() ?

Dans mon script, requests.get ne revient jamais :

import requests

print ("requesting..")

# This call never returns!
r = requests.get(
    "http://www.some-site.example",
    proxies = {'http': '222.255.169.74:8080'},
)

print(r.ok)

Quelle pourrait être la ou les raisons possibles ? Un remède ? Quel est le délai d'attente par défaut que get utilise ?

3voto

Erik Aronesty Points 2223

Parcheando la fonction "send" documentée corrigera cela pour toutes les demandes - même dans de nombreuses bibliothèques et sdk dépendants. Lorsque vous Parcheando des librairies, assurez-vous de patcher les fonctions supportées/documentées, pas TimeoutSauce - sinon vous pouvez vous retrouver à perdre silencieusement l'effet de votre patch.

import requests

DEFAULT_TIMEOUT = 180

old_send = requests.Session.send

def new_send(*args, **kwargs):
     if kwargs.get("timeout", None) is None:
         kwargs["timeout"] = DEFAULT_TIMEOUT
     return old_send(*args, **kwargs)

requests.Session.send = new_send

Les effets de l'absence de délai d'attente sont assez graves, et l'utilisation d'un délai d'attente par défaut ne peut presque jamais casser quoi que ce soit - parce que TCP lui-même a des délais d'attente par défaut également.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X