我正在尝试加载网址并收到此错误:
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 fetch似乎正试图加载此页面。 同时,这个页面在我的浏览器中加载得很好。
所以我尝试使用这段代码:
cmcHTM = urlfetch.fetch(url=url,
follow_redirects=False,
deadline=100
)
这只是没有回报。有没有办法获得这个HTML?!
答案 0 :(得分:3)
抱歉延迟回复。我发现这有效:
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 :(得分:1)
我认为这是网站中的问题,而不是代码中的问题。该网站似乎设计为当它没有检测到浏览器通常发送的某些标头时,它会自动重定向。例如。当我尝试使用curl访问它时,我得到一个空的主体,302重定向到自己,但在浏览器中我得到一个页面。您必须询问网站所有者他们正在检查的内容......