urlfetch перенаправлен в бесконечный цикл в python

Я пытаюсь загрузить URL-адрес, который перенаправляет на себя. Я предполагаю, что он загружает файл cookie и ищет его, но он никогда не видит его, поэтому существует бесконечный цикл запросов.

Я пробовал urllib2, urlfetch и httplib2. Ничего не работает.

Я попробовал это:

url = "http://www.cafebonappetit.com/menu/your-cafe/collins-cmc/cafes/details/50/collins-bistro" thing = urllib2.HTTPRedirectHandler() thing2 = urllib2.HTTPCookieProcessor() opener = urllib2.build_opener(thing, thing2) url = 'http://www.nytimes.com/2005/10/26/business/26fed.html?pagewanted=print' page = opener.open(url) 

Это работает в оболочке, но не в Google App Engine. В документации для urlfetch: http://code.google.com/appengine/docs/python/urlfetch/fetchfunction.html

в разделе follow_redirects говорится: «Куки-файлы не обрабатываются при перенаправлении. Если требуется обработка файлов cookie, установите follow_redirects в False и обрабатывайте файлы cookie и перенаправляйте вручную».

Я не знаю, как это сделать, и документация, похоже, не дает никаких подсказок.

Я выбрал чертову черту из этой проблемы, и нет никаких сообщений о подобных проблемах, которые могут работать для моей проблемы.

Немного больше объяснений. Рад, что по крайней мере поведение веб-сайта объяснено: он хочет какой-то cookie, и если cookie не установлен, он перенаправляет себя с заголовком настройки cookie. Вероятно, вам стоит прочитать, как работают cookie; веб-сайт отправляет файл cookie с использованием заголовка Set-Cookie, и браузер должен повторить его обратно (с некоторыми вариантами) в заголовке Cookie. Python имеет библиотеку для управления коллекциями файлов cookie, cookielib, которые помогут вам в этом.

Лучше всего использовать собственный API urlfetch; его возвращаемый объект имеет объект заголовков, который является dict, предоставляющим все заголовки (например, заголовок Set-Cookie). Чтобы отправить определенные заголовки, используйте аргумент заголовков функции urlfetch.fetch (). Здесь вы будете использовать заголовок Cookie (но помните, что формат заголовка Cookie, который вы установили, не совпадает с форматом заголовка Set-Cookie, в котором вы принимаете cookieib.

Удачи!

PS. Используя curl -v, легко увидеть, что на самом деле сайт отправляет три разных заголовка Set-Cookie. Вероятно, вам придется иметь дело со всеми тремя.

Interesting Posts