Тайм-аут HTTP-запроса - PullRequest
       17

Тайм-аут HTTP-запроса

2 голосов
/ 05 ноября 2008

В Python 2.6 в класс httplib.HTTPConnection был добавлен новый параметр «timeout»: http://docs.python.org/library/httplib.html#httplib.HTTPConnection

Однако это только тайм-аут для подключения к серверу. Я пытаюсь установить значение тайм-аута для запроса , а не для подключения. Кажется, это не поддерживается httplib.

Есть ли способ подражать этому поведению?

Ответы [ 4 ]

9 голосов
/ 05 ноября 2008

Вы можете установить глобальное время ожидания сокета (*) :

import socket

timeout = 10
socket.setdefaulttimeout(timeout)

(*) РЕДАКТИРОВАТЬ : Как правильно отмечают люди в комментариях: Это технически верно, но оно имеет только предсказуемые результаты для задач, которые включают одну операцию сокета. HTTP-запрос состоит из нескольких операций с сокетами (например, DNS-запросы или другие вещи, которые могут быть абстрагированы от HTTP-клиента). Из-за этого тайм-аут всей операции становится непредсказуемым.

7 голосов
/ 06 ноября 2008

Нет, нет.

Это потому, что HTTP-спецификация не предоставляет клиенту ничего для указания информации о времени жизни с помощью HTTP-запроса. Вы можете сделать это только на уровне TCP, как вы упомянули.

С другой стороны, сервер может информировать клиента о ситуациях тайм-аута с кодами состояния HTTP 408 Время ожидания запроса соотв. 504 Время ожидания шлюза .

5 голосов
/ 15 декабря 2010

Вы также можете использовать settimeout на сокете соединения (работает с Python 2.5):

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

Если сервер не может отправить ответ в течение 5 секунд, будет выдано socket.error.

0 голосов
/ 18 июля 2018

Когда вы инициируете соединение, в качестве третьего аргумента можно указать значение тайм-аута.

connection = HTTPConnection(<IP of URL>, <port or None>, <timeout>)
...

- это число с плавающей точкой в ​​секундах.

connection = HTTPConnection('slow.service.com', None, 20.0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...