2012-03-03 5 views
3

После долгих чтений здесь, в Stackoverflow, а также в Интернете, я все еще пытаюсь заставить работать.Как проверить подлинность сайта с помощью Python с помощью urllib2?

Моя задача: получить доступ к ограниченной части веб-сайта, для которого я являюсь участником, используя Python и urllib2.

Из того, что я прочитал код должен быть таким:

mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() 

url = 'http://www.domain.com' 

mgr.add_password(None, url, 'username', 'password') 
handler = urllib2.HTTPBasicAuthHandler(mgr) 
opener = urllib2.build_opener(handler) 

urllib2.install_opener(opener) 

try: 
    response = urllib2.urlopen('http://www.domain.com/restrictedpage') 
    page = response.read() 
    print page.geturl() 
except IOError, e: 
    print e 

Отпечаток не печатает «http://www.domain.com/restrictedpage», но показывает «HTTP://www.domain.com/login ", поэтому мои учетные данные не сохраняются/обрабатываются, и я перенаправляюсь.

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

Мой главный вопрос: что необходимо для аутентификации на веб-сайте с использованием Python и urllib2? Быстрый вопрос: что я делаю неправильно?

+0

действительно ли сайт, на котором вы основываете Http Authentication ?? на многих сайтах нет, вам нужно будет выяснить, какие переменные размещены на каком URL-адресе, и делать все вручную. – dm03514

+0

Как я могу узнать? Я знаю о заголовках 401, но я не могу их захватить. У вас есть пример того, как это сделать вручную? – Roland

ответ

0

Для HTTP Basic Auth вы можете обратиться так: http://www.voidspace.org.uk/python/articles/authentication.shtml

+0

Спасибо за ссылку, но, к сожалению, это не помогло. Я теперь смотрю на Requests, так как это lib, целью которого является упрощение этих вещей. – Roland

8

Проверьте сначала вручную, что на самом деле происходит, когда вы успешно прошедших проверку подлинности (инструкции с Chrome):

  • Открытые инструменты develper в Chrome (Ctrl + Shift + I)
  • Щелкните вкладку «Сеть»
  • Идите и выполните аутентификацию вручную (перейдите на страницу, введите user + passwd + submit)
  • проверить метод POST на вкладке «Сеть» инструментов разработчика
  • проверить заголовки запроса, параметры строки запроса и данные формы. Там вы найдете всю необходимую информацию о том, что вам нужно иметь в своем ПОСТ.

Затем установите "Client Advanced Rest (ARC)" Chrome расширение

Используйте ARC, чтобы построить правильный POST для проверки подлинности.

Теперь вы знаете, что нужно иметь в своих заголовках и данных формы. Вот пример кода с использованием Запросов, которые работали для меня на одном конкретном сайте:

import requests 

USERNAME = 'user' # put correct usename here 
PASSWORD = 'password' # put correct password here 

LOGINURL = 'https://login.example.com/' 
DATAURL = 'https://data.example.com/secure_data.html' 

session = requests.session() 

req_headers = { 
    'Content-Type': 'application/x-www-form-urlencoded' 
} 

formdata = { 
    'UserName': USERNAME, 
    'Password': PASSWORD, 
    'LoginButton' : 'Login' 
} 

# Authenticate 
r = session.post(LOGINURL, data=formdata, headers=req_headers, allow_redirects=False) 
print r.headers 
print r.status_code 
print r.text 

# Read data 
r2 = session.get(DATAURL) 
print "___________DATA____________" 
print r2.headers 
print r2.status_code 
print r2.text 
Смежные вопросы