Я пытаюсь использовать HTTPConnection
(2.7.8), чтобы сделать запрос, и я установил таймаут в 10 с помощью HTTPConnection(host, timeout=10)
. Однако, HTTPConnection.request()
не кажется таймаутом через 10 секунд. На самом деле, HTTPConnection.timeout
не кажется, даже для чтения HTTPConnection.request()
(это только читать HTTPConnection.connect()
. Это мое понимание правильно? Является ли timeout
применимо только к connect()
и не request()
? Есть ли способ тайм-аут request()
?HTTPConnection.request не соблюдает тайм-аут?
Update :
Я думаю, что я сузил проблему дальше: если я не предоставил схему, она не будет соблюдать тайм-аут сокета. Если схема была предоставлена, то есть полный URL-адрес равен http://google.com:22222
, тогда это Я задаюсь вопросом, почему наличие схемы должно иметь значение. То есть следующее не уважает таймаут
socket.setdefaulttimeout(3)
conn = HTTPConnection('google.com:22222')
conn.timeout = 3
conn.request('GET', '')
тогда, это делает:
socket.setdefaulttimeout(3)
conn = HTTPConnection('http://google.com:22222')
conn.timeout = 3
conn.request('GET', '')
Однако, это не происходит во всех областях.
Благодаря
Пожалуйста, проверьте http://stackoverflow.com/questions/265720/http-request-timeout. Надеюсь, это поможет :) – itzMEonTV
Нет, этот ответ не работает для меня. Он все еще застревает в 'request()'. Пример url - google.com:2222 – Kar
Вы пытались предоставить IP-адрес напрямую (вместо имени хоста)? Вызовите 'socket.getaddrinfo()', чтобы получить ip-адрес. Похоже, что такая же проблема, как [ftplib.FTP timeout имеет непоследовательное поведение] (http://stackoverflow.com/q/28429501/4279): 'request()' выполняет несколько операций сокета. Каждая операция ограничена таймаутом. Но несколько объединенных операций могут занять больше времени. – jfs