Как я могу заставить urllib2 отключиться?

Я хочу протестировать обработку моего приложения таймаутов при захвате данных через urllib2, и я хочу, чтобы какой-то способ заставить запрос на тайм-аут.

Не удалось найти очень медленное подключение к Интернету, какой метод я могу использовать?

Кажется, я помню интересное приложение / набор для моделирования таких вещей. Может, кто-то знает ссылку?

  • urrlib2.urlopen: «Имя или услуга не известна» сохраняется при запуске скрипта без подключения к Интернету
  • Сценарий Python для перевода через google translate
  • Подмена IP-адреса источника HTTP-запроса
  • Отправка данных с использованием POST в Python для PHP
  • таймаут для urllib2.urlopen () в версиях pre Python 2.6
  • Список всех файлов в онлайн-каталоге с Python?
  • Как «поддерживать жизнь» с cookielib и httplib в python?
  • urllib2.urlopen будет висеть навсегда, несмотря на таймаут
  • 5 Solutions collect form web for “Как я могу заставить urllib2 отключиться?”

    Обычно я использую netcat для прослушивания порта 80 моего локального компьютера:

     nc -l 80 

    Затем я использую http: // localhost / в качестве URL-адреса запроса в своем приложении. Netcat ответит на порт http, но никогда не даст ответа, поэтому запрос будет гарантирован тайм-аутом при условии, что вы указали тайм-аут в вашем urllib2.urlopen() или вызвали socket.setdefaulttimeout() .

    Вы можете установить таймаут по умолчанию, как показано выше, но вы можете использовать сочетание обоих с Python 2.6 в опции urlopen:

     import urllib2 import socket try: response = urllib2.urlopen("http://google.com", None, 2.5) except URLError, e: print "Oops, timed out?" except socket.timeout: print "Timed out!" 

    Тайм-аут по умолчанию для urllib2 бесконечен, а импорт сокета гарантирует, что вы поймаете таймаут как исключение socket.timeout

     import socket socket.setdefaulttimeout(2) # set time out to 2 second. 

    Если вы хотите установить тайм-аут для каждого запроса, вы можете использовать аргумент таймаута для urlopen

    почему бы не написать очень простой скрипт CGI в bash, который просто спит для требуемого периода ожидания?

    Если вы работаете на Mac, speedlimit очень круто.

    Там также dummynet . Это намного более хардкор, но это также позволяет вам делать гораздо более интересные вещи. Вот предварительно настроенный образ виртуальной машины .

    Если вы уже работаете в ящике Linux, есть netem .

    По-моему, я слышал о Windows-инструменте под названием TrafficShaper, но тот, который я еще не проверил.

    Python - лучший язык программирования в мире.