requests python http

requests - request package python



Tiempo de espera de solicitud de HTTP (3)

En Python 2.6, se agregó un nuevo parámetro de "tiempo de espera" a la clase httplib.HTTPConnection: http://docs.python.org/library/httplib.html#httplib.HTTPConnection

Sin embargo, esto es solo un tiempo de espera para la conexión a un servidor. Estoy buscando establecer un valor de tiempo de espera para la solicitud , no la conexión. Esto no parece ser compatible con httplib.

¿Hay alguna forma de emular este comportamiento?


No, no hay.

Es porque la especificación HTTP no proporciona nada para que el cliente especifique información de tiempo de vida con una solicitud HTTP. Puede hacer esto solo en el nivel TCP, como mencionó.

Por otro lado, el servidor puede informar al cliente sobre situaciones de tiempo de espera con los códigos de estado HTTP 408 Request Timeout resp. 504 Gateway Timeout .


También puede usar settimeout en el socket de la conexión (funciona con Python 2.5):

connection = HTTPConnection(''slow.service.com'') connection.request(...) connection.sock.settimeout(5.0) response = connection.getresponse() response.read() connection.close()

Si el servidor no puede enviar la respuesta en 5 segundos, se socket.error un socket.error .


Puede establecer un tiempo de espera de socket global (*) :

import socket timeout = 10 socket.setdefaulttimeout(timeout)

(*) EDITAR : Como las personas en los comentarios señalan correctamente: Esto es técnicamente cierto, pero solo tiene resultados predecibles para tareas que involucran una operación de socket único. Una solicitud HTTP consiste en múltiples operaciones de socket (por ejemplo, solicitudes DNS u otras cosas que pueden abstraerse de un cliente HTTP). El tiempo de espera de la operación general se vuelve impredecible por eso.