2013-09-15 2 views
2

Я использую этот код для входа на веб-сайт. После запроса POST сайт перенаправляется на страницу профиля, и я вижу, что я вошел в систему. Но следующий запрос не позволяет мне войти в систему, даже если я храню файлы cookie. Это не в частности, о сайте Pastebin, поэтому, пожалуйста, не говори мне, чтобы использовать их APIPython: Cookies не сохраняются между запросами

def web_login(username,password): 
     LOGIN_URL = 'http://pastebin.com/login.php' 
     HOME_URL = 'http://pastebin.com/' 
     jar = cookielib.CookieJar() 
     payload = {"user_name":username,"user_password":password,"submit_hidden":"submit_hidden"} 
     s = requests.Session() 
     user_agent = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:23.0) Gecko/20100101 Firefox/23.0'} 
     r = s.post(LOGIN_URL,data=payload,headers=user_agent,cookies=jar) 
     r = s.get(HOME_URL,headers=user_agent,cookies=jar)   
     print r.text 
+4

Что происходит, когда вы бросаете ', cookies = jar' в' post', 'get'? – falsetru

+0

Он работает тогда. Благодаря! –

ответ

3

Как @falsetru указал ваш вопрос, используя внешние кук. Причина в том, что каждый объект Session имеет свою собственную банку cookie и автоматически сохранит их для вас. Переходя к значению для cookies сообщает сессии предпочитать эту банку через его внутренний один и не будет обновлять один принятый в случае, если вы хотите быть более четко вы могли бы сделать это:.

r = s.post(LOGIN_URL, data=payload, headers=user_agent) 
jar = r.cookies 
home = s.get(HOME_URL, headers=user_agent, cookies=jar) 

Другое дело, следует отметить, что если вы отправляете те те же заголовки, каждый раз, когда вы можете сделать:

s = requests.Session() 
s.headers.update(user_agent) 
r = s.post(LOGIN_URL, data=payload) 
home = s.get(HOME_URL) 

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

Я хотел бы также отметить, что если вы хотите использовать пользовательские кук, который обеспечивает тот же интерфейс, как cookielib.CookieJar вы также можете сделать:

jar = MyCookieJar() 
s = requests.Session() 
s.cookies = jar 
r = s.post(LOGIN_URL, data=payload) 
home = s.get(HOME_URL) 

И тогда вы можете получить доступ к кукам через оба jar и s.cookies ,

Смежные вопросы