URL holt zu viele wiederholte Weiterleitungen
-
28-10-2019 - |
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?!
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 ...