Question

Je suis en train de charger une URL et je reçois cette erreur:

downloadError: ApplicationError: 2 Trop de redirections répétées

est le code que je utilise:

  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)

Je vérifie les redirections de ce site à l'adresse: http: //www.internetofficer. com / seo-outil / redirect vérification / et je trouve que ce site est redirigé vers lui-même! Donc, semble URL Fetch tourner en rond en essayant de charger cette page. Pendant ce temps, cette page se charge très bien dans mon navigateur.

J'ai essayé d'utiliser ce code:

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

Ce juste ne retourne rien si. Est-il possible d'obtenir ce code html?

Était-ce utile?

La solution

Désolé pour la réponse tardive. J'ai trouvé ce qui a fonctionné:

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

Je suppose que la clé est la boucle while - suivant les réoriente en fonction de l'en-tête de retour ...

Autres conseils

Je pense que cela est un problème dans le site, et non dans votre code. Le site semble avoir été conçu de sorte qu'il fait un redirection vers lui-même quand il ne détecte pas une tête qui est habituellement envoyé par un navigateur. Par exemple. lorsque je tente d'y accéder avec boucle je reçois un corps vide avec une redirection 302 à lui-même, mais dans le navigateur je reçois une page. Il faudrait demander au propriétaire du site ce qu'ils vérifient pour ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top