как исправить python, ошибку urlopen [Errno 8], используя eventlet зеленый

Новичок Python здесь.

Я делаю много асинхронных http-запросов, используя eventlet и urllib2. В верхней части моего файла у меня есть

import eventlet
import urllib
from eventlet.green import urllib2

Затем я делаю много асинхронных http-запросов, которые успешно выполняются с помощью этой строки:

conn = urllib2.urlopen(signed_url, None)

И вдруг я получаю эту ошибку:

URLError: <urlopen error [Errno 8] nodename nor servname provided, or not known>

Эта ошибка возникает в той же строке urllib2.urlopen, что странно, поскольку до этого она срабатывала много раз. Кроме того, когда я печатаю signed_url, а затем просто вставляю его в свой браузер, я получаю правильный ответ, поэтому URL-адрес правильно отформатирован.

Я прыгал по сообщениям, но не могу найти правильную стратегию отладки для этого. Концептуально, что может быть причиной этой ошибки? И как посоветуете исправить?

Я использую Python 2.7.6.

Спасибо.


person hackstar15    schedule 18.08.2015    source источник


Ответы (1)


Ошибка «имя узла неизвестно» означает, что разрешение DNS не удалось. Наиболее вероятной причиной является ограничение скорости вышестоящего DNS-сервера. Если вы серьезно занимаетесь веб-сканированием, я могу порекомендовать два подхода:

  • легко: получив эту ошибку, просто уменьшите лимит параллелизма, делайте меньше запросов в минуту. Рассматривайте первые N случаев этой ошибки как временные, повторите выборку URL после небольшой задержки. Настройте локальный кэширующий рекурсивный DNS-сервер (например, dnsmasq, несвязанный).
  • жесткий: раздельное разрешение DNS и выборка HTTP. Создайте отдельную очередь DNS-имен для разрешения. Передайте разрешенный IP-адрес в заголовках URL http://1.2.3.4/path и Host: domain в urlopen. Это позволит ограничить параллелизм DNS-запросов и фактических HTTP-запросов по отдельности. Это не поможет, если вы в основном получаете только один запрос на уникальный хост. Найдите себе много рекурсивных DNS-серверов для распределения работы, соберите их статистику времени отклика, чаще используйте более быстрые.
person temoto    schedule 18.08.2015