urlfetch перенаправлен в бесконечный цикл в python
Я пытаюсь загрузить URL-адрес, который перенаправляет на себя. Я предполагаю, что он загружает файл cookie и ищет его, но он никогда не видит его, поэтому существует бесконечный цикл запросов.
Я пробовал urllib2, urlfetch и httplib2. Ничего не работает.
- Кодирование URL в python
- Python urlparse - вырезать доменное имя без субдомена
- Как удалить запрос из URL-адреса?
- Django - CSS перестает работать при изменении URL-адресов
- URL-адреса, хранящиеся в базе данных для сайта Django
Я попробовал это:
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 и перенаправляйте вручную».
Я не знаю, как это сделать, и документация, похоже, не дает никаких подсказок.
Я выбрал чертову черту из этой проблемы, и нет никаких сообщений о подобных проблемах, которые могут работать для моей проблемы.
One Solution collect form web for “urlfetch перенаправлен в бесконечный цикл в python”
Немного больше объяснений. Рад, что по крайней мере поведение веб-сайта объяснено: он хочет какой-то 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. Вероятно, вам придется иметь дело со всеми тремя.
- надежно показать matplotlib (от 0,99 до 1,3,1) цифры без блокировки
- Удалить конечные данные из Django timesince