2012-02-20 1 views
0

Я пытаюсь загрузить URL и я получаю эту ошибку:URL Fetch слишком много повторяющихся перенаправляет

DownloadError: ApplicationError: 2 Too many repeated redirects

Это код, я использую:

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-адреса, кажется, идет по кругу, пытаясь загрузить эту страницу. Между тем, эта страница загружается только в моем браузере.

Так что я попытался использовать этот код:

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

Это просто ничего не возвращает, хотя. Есть ли способ получить этот html ?!

ответ

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 

Я думаю, ключ петля, а - следуя переадресовывает на основе заголовка обратного ...

1

Я думаю, что это проблема на сайте, а не в вашем коде. Сайт выглядит так, что он перенаправляет на себя, когда он не обнаруживает какой-либо заголовок, который обычно отправляется браузером. Например. когда я пытаюсь получить доступ к нему с помощью curl, я получаю пустое тело с перенаправлением 302 к себе, но в браузере я получаю страницу. Вы должны спросить владельца сайта, что они проверяют ...