url chercher trop de redirections réitérées
-
28-10-2019 - |
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?
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 ...