URL получает слишком много повторных перенаправлений - PullRequest
0 голосов
/ 20 февраля 2012

Я пытаюсь загрузить URL и получаю эту ошибку:

DownloadError: ApplicationError: 2 Слишком много повторных перенаправлений

Это код, который я использую:

  headers = { 'User-Agent' : 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1' }    
  url = "http://www.cafebonappetit.com/menu/your-cafe/collins-cmc/cafes/details/50/collins-bistro"
  cmcHTM = urlfetch.fetch(url=url)
  cmcHTML = str(cmcHTM.content)

Я проверяю перенаправления этого сайта по адресу: http://www.internetofficer.com/seo-tool/redirect-check/ и я обнаружил, что этот сайт перенаправлен на себя! Таким образом, выборка URL, кажется, идет кругами, пытаясь загрузить эту страницу. Между тем, эта страница прекрасно загружается в моем браузере.

Итак, я попытался использовать этот код:

  cmcHTM = urlfetch.fetch(url=url,
    follow_redirects=False,
    deadline=100
    )

Это просто ничего не возвращает, хотя. Есть ли способ получить этот HTML?!

Ответы [ 2 ]

3 голосов
/ 05 января 2013

Извините за задержку ответа.Я обнаружил, что это сработало:

import urllib, urllib2, Cookie
from google.appengine.api import urlfetch

class URLOpener:
  def __init__(self):
      self.cookie = Cookie.SimpleCookie()

  def open(self, url, data = None):
      if data is None:
          method = urlfetch.GET
      else:
          method = urlfetch.POST

      while url is not None:
          response = urlfetch.fetch(url=url,
                          payload=data,
                          method=method,
                          headers=self._getHeaders(self.cookie),
                          allow_truncated=False,
                          follow_redirects=False,
                          deadline=10
                          )
          data = None # Next request will be a get, so no need to send the data again. 
          method = urlfetch.GET
          self.cookie.load(response.headers.get('set-cookie', '')) # Load the cookies from the response
          url = response.headers.get('location')

      return response

  def _getHeaders(self, cookie):
      headers = {
                 'Host' : 'www.google.com',
                 'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)',
                 'Cookie' : self._makeCookieHeader(cookie)
                  }
      return headers

  def _makeCookieHeader(self, cookie):
      cookieHeader = ""
      for value in cookie.values():
          cookieHeader += "%s=%s; " % (value.key, value.value)
      return cookieHeader

Полагаю, ключом является цикл while - после перенаправления на основе возвращаемого заголовка ...

1 голос
/ 22 февраля 2012

Я думаю, что это проблема на сайте, а не в вашем коде. Сайт кажется разработанным, поэтому он перенаправляет на себя, когда не обнаруживает заголовок, который обычно отправляется браузером. Например. когда я пытаюсь получить к нему доступ с помощью curl, я получаю пустое тело с перенаправлением 302 на себя, но в браузере я получаю страницу. Вы должны спросить владельца сайта, что они проверяют ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...