Googles App Engine, Python: Как получить параметры со страниц входа в систему? - PullRequest
0 голосов
/ 16 декабря 2009

Вот цитата из здесь :

Итак, короче ... нужно заглянуть в логин странице, посмотрите, какие параметры он использует, например логин = ххх, пароль = ггг, опубликовать эта страница, и вам придется управлять куки тоже, вот где библиотека как твил и т. д. входят в картину.

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

Ответы [ 3 ]

2 голосов
/ 17 декабря 2009

Есть два способа

  1. Как я уже говорил, вы используете саржу или механизацию, так как саржа - это просто обертка над механизацией, вы можете просто использовать механизацию (http://wwwsearch.sourceforge.net/mechanize/),, но для использования механизации вам может понадобиться взломать см. импортировать модуль механизации в скрипт Python для более подробной информации

  2. Сделай это нелегко и научись чему-нибудь, занимаясь этим Давайте посмотрим, как войти в Yahoo

a) загляните на страницу (https://login.yahoo.com/config/login_verify2?&.src=ym)) и посмотрите, как выглядит форма, вы можете проверять firebug вместо просмотра необработанного html.

б) форма имеет логин и passwd два поля, плюс еще некоторые скрытые поля позволяют игнорировать их на данный момент, поэтому до сих пор у нас есть URL-адрес формы действия = "https://login.yahoo.com/config/login?" form_data = {'login': 'my_login', 'passwd': 'my_passwd'}

в) мы можем опубликовать вышеуказанные данные на правильный URL-адрес публикации, и это может сработать, но обычно нам нужно перейти на другие страницы, и если у нас нет cookie, он снова запросит логин. так что давайте использовать банку печенья, например

jar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
form_data = urllib.urlencode(form_data)
# data returned from this pages contains redirection
resp = opener.open(url, form_data)

d) теперь страница из Yahoo перенаправляет на другие страницы, например, если я захочу увидеть страницу почты, я сейчас перейду к ней, и куки позаботятся об аутентификации, например,

resp = opener.open('http://mail.yahoo.com')
print resp.read()

Если вы видите распечатку с надписью: «xxxx | logout, Хм ... ваш браузер официально не поддерживается». это означает, что я вошел в систему :), но, поскольку почта Yahoo является страницей ajax и не поддерживает мой простой браузер сценариев, мы можем обойти этот инструмент, подделав тип браузера и сделав много всего.

Вот окончательный код

import urllib, urllib2, cookielib

url = "https://login.yahoo.com/config/login?"
form_data = {'login' : 'your-login', 'passwd' : 'your-pass'}

jar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
form_data = urllib.urlencode(form_data)
# data returned from this pages contains redirection
resp = opener.open(url, form_data)
# yahoo redirects to http://my.yahoo.com, so lets go there insetad
resp = opener.open('http://mail.yahoo.com')
print resp.read()

Вам стоит посмотреть код Mechanzie или ссылки вроде этого http://www.voidspace.org.uk/cgi-bin/voidspace/downman.py?file=cookielib_example.py, чтобы увидеть, как они это делают.

мы можем опубликовать эти данные

1 голос
/ 17 декабря 2009

Я не уверен, понял ли я ваш вопрос, но если вам нужны параметры GET, с webapp, это будет примерно так:

login = self.request.get('login')
password = self.request.get('password')

Подробнее информация о работе с формами доступна здесь

Вы также должны попробовать службу пользователя , если хотите быстрый способ аутентификации ваших пользователей.

1 голос
/ 16 декабря 2009

Это не специфично для движка приложения или Python. Вам нужно ознакомиться с тем, как работают POST и GET. Когда вы заходите на типичный веб-сайт, ваш браузер отправляет POST на веб-сервер с кучей параметров. Вы можете увидеть, какие параметры вызываются, просмотрев исходный веб-сайт и ища форму входа. Как только вы знаете имена параметров, вы можете включить их в свой POST на веб-сайте. Затем веб-сайт вернет cookie, который обычно хранится в вашем браузере. Поскольку вы пытаетесь смоделировать браузер, вам нужно будет самостоятельно сохранить этот файл cookie и отправить его вместе, когда вы попытаетесь запросить дополнительные страницы с этого конкретного сайта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...