Как получить доступ к защищенному паролем сайту с помощью python? - PullRequest
2 голосов
/ 02 октября 2011

Я думал, что, если я получу доступ к сайту, защищенному паролем, с помощью механизма python, я получу 401 Несанкционированную ошибку, которая требует данные аутентификации.

Итак, в моем сценарии я попытался получить доступ к своему почтовому ящику Yahoo, которому, очевидно, нужны имя пользователя и пароль, я думал, что получу 401, но я не получил.

Код:

yahoo_mail = 'http://mail.cn.yahoo.com'
br = mechanize.Browser()
r = br.open(yahoo_mail)
print r.info()  #here, I got 200, it's ok apparently

br.select_form(nr=0)  #select the login form
r = br.submit()  #submit the form without providing username and password
print r.info()  #but I didn't get 401, why?

Вопрос:

  1. Почему я не получил 401 без предоставления информации об аутентификации?
  2. Если не мой почтовый ящик, любой другой сайт может дать мне 401?

Ответы [ 3 ]

5 голосов
/ 02 октября 2011

Большинство веб-сайтов в наши дни не используют HTTP-аутентификацию. Таким образом, 401 не возвращается, если вы не можете войти в систему; вместо этого возвращается нормальный 200 успешный ответ, и текст внутри на веб-странице говорит, что вы не вошли в систему.

Вместо этого сайты используют куки. Это означает, что ваш браузер фактически не знает, на каких сайтах он вошел; когда вы наконец предоставите успешный пароль для Yahoo !, он либо изменит cookie, который он сохранил в вашем браузере, либо, возможно, даже сохранит тот же cookie, но просто изменит запись базы данных на своем конце, которая связана с cookie.

Таким образом, коды HTTP-статуса обычно бесполезны во время входа в систему. Вместо этого вам придется почистить текст страницы «200 Success», которая возвращается, чтобы увидеть, поздравляет ли вас с входом в систему или повторяет форму; или, альтернативно, вы можете просто проверить URL страницы, которую вы вернули, и посмотреть, является ли это снова формой входа в систему, или же это место назначения, которое вы хотели посетить.

0 голосов
/ 02 октября 2011

Похоже, что Yahoo просто обрабатывает аутентификацию по паролю в своем коде.Попробуйте добавить в код следующие две строки:

f = open('a.html', 'w')
f.write(r.read())

Когда вы прочитаете страницу, вы снова увидите ту же страницу.

Похоже, у них просто есть немного JavaScript, который говорит вам, что ваш пароль был неверным.

0 голосов
/ 02 октября 2011
  1. Ошибка аутентификации не означает, что вам не разрешено видеть страницу за аутентификацией.Это означает, что вы не увидите версию этой страницы, которая учитывает ваши учетные данные.Если вы находитесь на домашней странице и не можете пройти проверку подлинности, вы все равно можете видеть домашнюю страницу.

  2. Поисковые системы не индексируют 401 страницу, поэтому это может быть довольно сложнонайти ...

...