Найти - Пользователи
Полная версия: Аутентификация паролем в urllib2
Начало » Web » Аутентификация паролем в urllib2
1 2
grok
Доброго времени суток! Помогите разобраться..
В данный момент работаю с запросами, требующими аутентификации паролем. Решил воспользоваться простым обработчиком аутентификациии 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 (в этом аргументе передается имя или описаие области, ассоциированное с аутентификацией), но где или как её найти? К примеру на этом ресурсе???
Спасибо =)
igor.kaist
grok
Решил воспользоваться простым обработчиком аутентификациии HTTP, но тут же возникли проблемы.
На этом сайте разве используется HTTP аутентификация? По куки же…
grok
Разве прежде чем получить от сервера куки (и при последующем входе уже проходить аутентификацию по ним), не нужно вбивать тот же логин и пароль??
igor.kaist
grok
Разве прежде чем получить от сервера куки (и при последующем входе уже проходить аутентификацию по ним), не нужно вбивать тот же логин и пароль??
Нет, вы пытаетесь пройти HTTP аутентификацию, которая, кстати нигде почти уже не используется. Вам нужно отправить POST запрос, и получить куки, с помощью которых уже открывать страницы.
grok
igor.kaist, спасибо за разъяснение! Буду пробовать по Вашему совету :)
grok
Попробовал сделать вот так:
#!/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’. Оно и верно, если заголовки указаны не все или не верно..
Вопрос: “Как узнать какие именно заголовки ему нужно отослать, дабы получить авторизованную страницу?”
maxwell
grok, должно помочь http://docs.python.org/library/cookielib.html
Александр Кошелев
У вас урл неправильный. Ручка авторизации находится тут – http://python.su/forum/login.php?action=in
igor.kaist
grok
“Как узнать какие именно заголовки ему нужно отослать, дабы получить авторизованную страницу?”
Под Firefox установите Firebug, в опере можно запустить Dragonfly
grok
Всем большое спасибо! Завтра обязательно попробую, на сегодня сил больше нет)
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