Frage

Ich versuche eine URL zu laden und bekomme diesen Fehler:

DownloadError: ApplicationError: 2 Zu viele wiederholte Weiterleitungen

Dies ist der Code, den ich verwende:

  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)

Ich überprüfe die Umleitungen dieser Website unter: http://www.internetofficer.com/seo-tool/redirect-check/Und ich stellte fest, dass diese Seite zu sich selbst umgeleitet wird! Der URL -Abruf scheint also in Kreisen zu gehen, um diese Seite zu laden. In der Zwischenzeit lädt diese Seite in meinem Browser einwandfrei.

Also habe ich versucht, diesen Code zu verwenden:

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

Das gibt jedoch nichts zurück. Gibt es eine Möglichkeit, diese HTML zu bekommen?!

War es hilfreich?

Lösung

Entschuldigung für die verspätete Antwort. Ich fand das, das funktionierte:

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

Ich denke, der Schlüssel ist die while -Schleife - folgt den Weiterleitungen basierend auf dem Rückkehrkopf ...

Andere Tipps

Ich denke, dies ist ein Problem auf der Website, nicht in Ihrem Code. Die Site scheint so gestaltet zu sein, dass sie sich selbst weiterleitet, wenn sie keinen Header erkennt, der üblicherweise von einem Browser gesendet wird. ZB Wenn ich versuche, mit Curl darauf zuzugreifen, bekomme ich einen leeren Körper mit einer 302 -Umleitung für sich selbst, aber im Browser bekomme ich eine Seite. Sie müssten den Site -Besitzer fragen, was er überprüfen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top