Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 19, 2011 11:59:57

grok
От:
Зарегистрирован: 2010-09-09
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

Аутентификация паролем в urllib2

Доброго времени суток! Помогите разобраться..
В данный момент работаю с запросами, требующими аутентификации паролем. Решил воспользоваться простым обработчиком аутентификациии HTTP, но тут же возникли проблемы. Попытался авторизоваться на данном ресурсе, делая так:

#! /usr/bin/python
import urllib2

auth = urllib2.HTTPBasicAuthHandler()

auth.add_password("navlogin",
"http://python.su/",
"grok",
"mypass")

opener = urllib2.build_opener(auth)

urllib2.install_opener(opener)
u = urllib2.urlopen("http://python.su/forum/")

text = u.read()
f = "/home/adv/python/pass"
fopen = open(f, "w")
fopen.write(text)
fopen.close()
В итоге получаю неавторизованную страницу.. ИМХО дело в realm (в этом аргументе передается имя или описаие области, ассоциированное с аутентификацией), но где или как её найти? К примеру на этом ресурсе???
Спасибо =)



Офлайн

#2 Янв. 19, 2011 12:55:34

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Аутентификация паролем в urllib2

grok
Решил воспользоваться простым обработчиком аутентификациии HTTP, но тут же возникли проблемы.
На этом сайте разве используется HTTP аутентификация? По куки же…



Офлайн

#3 Янв. 19, 2011 13:06:45

grok
От:
Зарегистрирован: 2010-09-09
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

Аутентификация паролем в urllib2

Разве прежде чем получить от сервера куки (и при последующем входе уже проходить аутентификацию по ним), не нужно вбивать тот же логин и пароль??



Офлайн

#4 Янв. 19, 2011 13:16:08

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Аутентификация паролем в urllib2

grok
Разве прежде чем получить от сервера куки (и при последующем входе уже проходить аутентификацию по ним), не нужно вбивать тот же логин и пароль??
Нет, вы пытаетесь пройти HTTP аутентификацию, которая, кстати нигде почти уже не используется. Вам нужно отправить POST запрос, и получить куки, с помощью которых уже открывать страницы.



Офлайн

#5 Янв. 19, 2011 13:25:25

grok
От:
Зарегистрирован: 2010-09-09
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

Аутентификация паролем в urllib2

igor.kaist, спасибо за разъяснение! Буду пробовать по Вашему совету :)



Офлайн

#6 Янв. 19, 2011 16:38:26

grok
От:
Зарегистрирован: 2010-09-09
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

Аутентификация паролем в urllib2

Попробовал сделать вот так:

#!/usr/bin/python
import urllib, urllib2

url = 'http://python.su/forum/login.php'

data = urllib.urlencode({'req_username' : 'mynickname', 'req_password' : 'mypass'})

headers = {'Host' : 'http://python.su',
'User-Agent' : 'Mozilla/4.0 (compatible; Windows NT 5.1; .NET CLR 2.0.50727)',
'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#'Accept-Language' : 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
#'Accept-Encoding' : 'gzip,deflate',
#'Accept-Charset' : 'windows-1251,utf-8;q=0.7,*;q=0.7',
'Keep-Alive' : '115',
'Connection': 'keep-alive',
'Referer' : 'http://python.su/forum',
'Content-Type' : 'application/x-www-form-urlencoded'}

request = urllib2.Request(url, data, headers)
handle = urllib2.urlopen(request)

print handle.read()
Но в ответ получаю ‘HTTPError: HTTP Error 400: Bad Request’. Оно и верно, если заголовки указаны не все или не верно..
Вопрос: “Как узнать какие именно заголовки ему нужно отослать, дабы получить авторизованную страницу?”



Офлайн

#7 Янв. 19, 2011 16:44:25

maxwell
От:
Зарегистрирован: 2008-08-26
Сообщения: 111
Репутация: +  0  -
Профиль   Отправить e-mail  

Аутентификация паролем в urllib2

grok, должно помочь http://docs.python.org/library/cookielib.html



Офлайн

#8 Янв. 19, 2011 16:45:38

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Аутентификация паролем в urllib2

У вас урл неправильный. Ручка авторизации находится тут – http://python.su/forum/login.php?action=in



Офлайн

#9 Янв. 19, 2011 17:02:47

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Аутентификация паролем в urllib2

grok
“Как узнать какие именно заголовки ему нужно отослать, дабы получить авторизованную страницу?”
Под Firefox установите Firebug, в опере можно запустить Dragonfly



Офлайн

#10 Янв. 19, 2011 17:40:37

grok
От:
Зарегистрирован: 2010-09-09
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

Аутентификация паролем в urllib2

Всем большое спасибо! Завтра обязательно попробую, на сегодня сил больше нет)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version