Найти - Пользователи
Полная версия: Авторизация. POST запрос. urllib(2). Куки
Начало » Python для новичков » Авторизация. POST запрос. urllib(2). Куки
1
Detonavomek
Всем привет!
Хочу разобраться с передачей запросов с помощью питона. Решил написать бота для простой игры - http://barbars.ru но столкнулся с проблемой. При авторизации пост запросом отправляются данные и в ответ в куки записуют логин, айди и сесию. Попытался это написать на питоне. Запрос в браузере на первом, а консольный вывод программы вот:
loginForm_hf_0=&login=MyTestUser&password=qwerty123&%3Asubmit=%D0%92%D0%BE%D0%B9%D1%82%D0%B8
#######################
{'Origin': 'http://barbars.ru', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'User-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1', 'Connection': 'Keep-Alive', 'Referer': 'http://barbars.ru/login', 'Content-type': 'application/x-www-form-urlencoded'}
#######################
Server: nginx/1.2.1
Date: Mon, 01 Jul 2013 23:20:58 GMT
Content-Type: text/html;charset=UTF-8
Content-Length: 3216
Connection: close
Set-Cookie: JSESSIONID=6E8E40AAB5408C3F14B866F24EBB749C; Path=/
Pragma: no-cache
Cache-Control: no-cache, max-age=0, must-revalidate
Content-Language: en-US
#######################
<cookielib.CookieJar[<Cookie JSESSIONID=6E8E40AAB5408C3F14B866F24EBB749C for barbars.ru/>]>
Проблема в том, что в куки не записывает нужные переменные. Можете сказать, что я не так сделал, или что я не сделал?
Сам код:
#!/usr/bin/env python 
# -*- coding: utf-8 -*-
import httplib, cookielib, urllib, urllib2
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
headers = {
    'Origin': 'http://barbars.ru',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1',
    'Content-Type': 'application/x-www-form-urlencoded', 
    'Connection': 'Keep-Alive', 
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Referer': 'http://barbars.ru/login'
}
data = {
	'login':'MyTestUser',
    'password':'qwerty123',
    'loginForm_hf_0':'',
    ':submit':'Войти'
}
#POST /login/wicket:interface/:13:loginForm::IFormSubmitListener:: HTTP/1.1
data = urllib.urlencode(data) 
req = urllib2.Request('http://barbars.ru/login', data, headers) 
response = opener.open(req)
print data
print "#######################"
print req.headers
print "#######################"
print response.headers
print "#######################"
print cj
П.С. Указаны разные браузеры потому, что в сафари мне не очень нравится их вывод.
П.П.С. Логин и пароль игрока указаны реальные)
Detonavomek
Никто не может помочь с этим?
s0rg
Detonavomek
Set-Cookie: JSESSIONID=6E8E40AAB5408C3F14B866F24EBB749C; Path=/
Detonavomek
<cookielib.CookieJar<Cookie JSESSIONID=6E8E40AAB5408C3F14B866F24EBB749C for barbars.ru/>>
Какие переменные вам еще нужны?
Detonavomek
s0rg
Какие переменные вам еще нужны?
login i id
Если посмотреть через браузер, то устанавливает 3 куки, а у меня только 1. Не могу понять где проблема.
s0rg
Да - посмотрел заголовки от сайта приходят 3 печеньки и все идут как Set-Cookie, скорее всего urllib2 не умеет работать с такими вещами - она просто запоминает первое значение и останавливается на этом.
У вас есть два варианта:
1. Взять любую из сторонних библиотек для работы с HTTP
2. Если нет желания/возможности ставить дополнительные библиотеки - эта задача достаточно просто решается с помощью встроенного httplib
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB