Я использую liburl2 с CookieJar / HTTPCookieProcessor в попытке смоделировать вход на страницу для автоматизации загрузки.
Я видел несколько вопросов и ответов по этому вопросу, но ничего, что решало бы мою проблему.Я теряю свой cookie, когда я имитирую логин, который заканчивается перенаправлением 302.Ответ 302 - это то, где cookie устанавливается сервером, но urllib2 HTTPCookieProcessor, похоже, не сохраняет cookie во время перенаправления.Я попытался создать класс HTTPRedirectHandler, чтобы игнорировать перенаправление, но это не помогло.Я попытался ссылаться на CookieJar глобально для обработки файлов cookie из HTTPRedirectHandler, но 1. Это не сработало (потому что я обрабатывал заголовок из перенаправителя, а используемой мной функции CookieJar extract_cookies требовался полный запрос) и2. Это ужасный способ справиться с этим.
Мне, вероятно, нужно какое-то руководство по этому вопросу, так как я довольно зелен с Python.Я думаю, что я в основном лаю здесь правильное дерево, но, возможно, сосредотачиваюсь на неправильной ветви.
cj = cookielib.CookieJar()
cookieprocessor = urllib2.HTTPCookieProcessor(cj)
class MyHTTPRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_302(self, req, fp, code, msg, headers):
global cj
cookie = headers.get("set-cookie")
if cookie:
# Doesn't work, but you get the idea
cj.extract_cookies(headers, req)
return urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers)
http_error_301 = http_error_303 = http_error_307 = http_error_302
cookieprocessor = urllib2.HTTPCookieProcessor(cj)
# Oh yeah. I'm using a proxy too, to follow traffic.
proxy = urllib2.ProxyHandler({'http': '127.0.0.1:8888'})
opener = urllib2.build_opener(MyHTTPRedirectHandler, cookieprocessor, proxy)
Добавление: я тоже пытался использовать механизацию, но безуспешно.Вероятно, это новый вопрос, но я задам его здесь, поскольку это та же самая конечная цель:
Этот простой код, использующий Mechanize, при использовании с URL-адресом 302 (http://fxfeeds.mozilla.com/firefox/headlines.xml) - обратите внимание, чтоТо же самое происходит, когда не используется set_handle_robots (False). Я просто хотел убедиться, что это не так:
import urllib2, mechanize
browser = mechanize.Browser()
browser.set_handle_robots(False)
opener = mechanize.build_opener(*(browser.handlers))
r = opener.open("http://fxfeeds.mozilla.com/firefox/headlines.xml")
Вывод:
Traceback (most recent call last):
File "redirecttester.py", line 6, in <module>
r = opener.open("http://fxfeeds.mozilla.com/firefox/headlines.xml")
File "build/bdist.macosx-10.6-universal/egg/mechanize/_opener.py", line 204, in open
File "build/bdist.macosx-10.6-universal/egg/mechanize/_urllib2_fork.py", line 457, in http_response
File "build/bdist.macosx-10.6-universal/egg/mechanize/_opener.py", line 221, in error
File "build/bdist.macosx-10.6-universal/egg/mechanize/_urllib2_fork.py", line 332, in _call_chain
File "build/bdist.macosx-10.6-universal/egg/mechanize/_urllib2_fork.py", line 571, in http_error_302
File "build/bdist.macosx-10.6-universal/egg/mechanize/_opener.py", line 188, in open
File "build/bdist.macosx-10.6-universal/egg/mechanize/_mechanize.py", line 71, in http_request
AttributeError: OpenerDirector instance has no attribute '_add_referer_header'
Есть идеи?