странные сбои urllib2 в некоторых системах - PullRequest
1 голос
/ 15 февраля 2011

У меня есть скрипт на python, который просто захватывает страницу с помощью urllib2, а затем переходит к использованию BeautifulSoup для разбора этого материала. Код:

class Foo(Bar):
    def fetch(self):
        try:
            self.mypage = urllib2.urlopen(self.url + 'MainPage.htm', timeout=30).read()
        except urllib2.URLError:
            sys.stderr.write("Error: system at %s not responding\n" % self.url)
            sys.exit(1)

система, к которой я пытаюсь получить доступ, является удаленной и находится за маршрутизатором Linux, который выполняет переадресацию портов между общедоступным статическим IP-адресом и локальной сетью IP-адреса реальной системы.

У меня возникали сбои в некоторых системах, и сначала я подумал об ошибке в urllib2 / python или о какой-то странной вещи TCP (сервер HTTP на самом деле является встроенной картой в какой-то промышленной системе). Но затем я попробовал другие системы, и urllib2 работает как положено, и я также могу правильно получить доступ к http-серверу, используя links2 или wget, даже в тех системах, где происходит сбой urllib2.

  • Ubuntu 10.04 LTS 32-битный от Apple Airport nat на удаленном adsl: все работает
  • Mac OSX 10.6 в локальной сети с сервером, удаленным за nat и т.д ...: все работает
  • Ubuntu 10.04 LTS 64bit с общедоступным временем ожидания IP-адреса: urllib2, ссылки и wget работают
  • Gentoo Linux с общедоступным временем ожидания ip: urllib2, ссылками и работой wget

Я проверил tcpdump на роутере linux (на стороне http-сервера), а urllib2 всегда завершает рукопожатие tcp даже из проблемных систем, но затем кажется, что оно зависает там. Я пытался включить / выключить syncookies и ECN, но это ничего не изменило.

Как я могу отладить и, возможно, решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 27 августа 2012

Спустя почти 17 месяцев у меня больше нет доступа к этой конкретной системе, поэтому я не смогу принять никакого реального ответа на этот вопрос.

По крайней мере, я могу сказать будущим читателям, какие ответы не хорошо:

  • меняется на httplib2
  • нет, мы не получаем перенаправления ICMP
  • нет, мы даже не отбрасываем пакеты фрагментации ICMP

веселит.

0 голосов
/ 07 июля 2011

Вы также можете переключиться на использование httplib2.

...