HTTP Request Timeout
Dans la version 2.6 de Python, un nouveau "timeout" paramètre a été ajouté à la httplib.HTTPConnection classe:
http://docs.python.org/library/httplib.html#httplib.HTTPConnection
Cependant, ce n'est qu'un délai d'attente pour la connexion à un serveur. Je suis à la recherche pour définir une valeur de délai d'expiration pour la demande, pas la connexion. Cela ne semble pas être pris en charge par httplib.
Est-il possible d'émuler ce comportement?
OriginalL'auteur Corey Goldberg | 2008-11-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir une prise timeout (*):
(*) MODIFIER: Comme les gens dans les commentaires correctement point: C'est techniquement vrai, mais il ne dispose que des résultats prévisibles pour les tâches impliquant une seule opération de socket. Une requête HTTP est composé de plusieurs opérations de socket (par exemple, les requêtes DNS ou d'autres choses qui pourraient être abstrait d'un client HTTP). Le délai global de l'opération devient imprévisible à cause de cela.
Méfiez-vous des requêtes HTTPS. Le client peut obtenir bloqué indéfiniment en raison d'un bogue connu dans le noyau 2.6.x bugs.python.org/issue5103 (le délai est ignorée durant le processus de négociation SSL)
Cela ne fonctionne pas pour moi. Il est suspendu à la connexion.demande().
href="http://stackoverflow.com/q/28669744/4279">HTTPConnection.demande de non respect de délai d'attente?
a un point. Une seule connexion HTTP réelle peut impliquer de nombreuses socket étapes (ie DNS). Si la socket, le délai est de 10 secondes, il peut prendre plus de temps pour l'intégralité de la requête HTTP avec un nom d'hôte spécifié. J. F. prétend qu'il prend 3x complètement délai d'attente. Voir son lien.
OriginalL'auteur Tomalak
Non, il n'y en a pas.
C'est parce que la HTTP spec ne fournit pas de quoi que ce soit pour le client de spécifier la durée de vie de l'information avec une requête HTTP. Vous pouvez faire ceci seulement sur le niveau TCP, comme vous l'avez mentionné.
D'autre part, le serveur peut en informer le client au sujet de délai d'attente de situations avec les codes d'état HTTP 408 Request Timeout resp. 504 Gateway Timeout.
OriginalL'auteur mkoeller
Vous pouvez également utiliser
settimeout
sur le socket de la connexion (fonctionne avec Python 2.5):Si le serveur ne peut pas envoyer la réponse dans les 5 secondes, un
socket.error
sera soulevée.ssl.SSLError
en python 2.7 pour autant que je peux direce n'est pas de définir un délai d'attente pour la connexion.demande(). Et vous ne pouvez pas déplacer la connexion.la chaussette.settimeout(5.0) d'une ligne, car la connexion.chaussette n'est
OriginalL'auteur Pankrat
Lorsque vous lancer la connexion, il est possible de donner comme troisième argument, la timout valeur.
est un flotteur en quelques secondes.
OriginalL'auteur Bob Baeck