Решено: Авторизация из python скрипта на сайте (4konverta.com)

Модератор: Модераторы разделов

Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10

Решено: Авторизация из python скрипта на сайте

Сообщение BlackStar »

Есть необходимость создать десктопную версию сервиса 4konverta.com. Но возникла проблема на этапе авторизации. Итак вот HTML код формы login/password:
<form id="loginForm" action="http://www.4konverta.com/login/process" method="post" class="niceform twocols-form">
<label for="login">Логин</label>
<input type="text" id="login" name="login" value="" size="14"/> <br/>
<label for="password">Пароль</label>
<input type="password" id="password" name="password" size="14"/><br/>
<input type="checkbox" id="remember" name="remember"/>
<label for="remember">Запомнить меня</label>
<input type="checkbox" name="secure" id="secure" value="checked" onchange="toggleSecure(this)" />
<label for="secure">Безопасный вход</label><br/>
<p class="buttons">
<input type="submit" value="Вход"/>
<a href="/reset-password/">Я забыл пароль</a><br/></p>
</form>

Цветом выделены интересные поля. Далее вот такой простой python код который по идее должен выполнять авторизацию, но
он не работает.

Код: Выделить всё

import urllib

def main():
    params = urllib.urlencode({
                    'login' : "1",
                    'password': "1"
                    })
    f = urllib.urlopen(
            "http://www.4konverta.com/login/process",
            params)
    print f.read()

if __name__ == "__main__":
    main()

А это лог авторизации в браузере Firefox:
http://www.4konverta.com/login/process

POST /login/process HTTP/1.1
Host: www.4konverta.com
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020410 Fedora/3.0.6-1.fc10 Firefox/3.0.6
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: UTF-8,*
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.4konverta.com/login/
Content-Type: application/x-www-form-urlencoded
Content-Length: 18
login=1&password=1

HTTP/1.x 302 Found
Date: Sun, 15 Feb 2009 16:40:39 GMT
Server: Jetty(6.1.x)
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Location: http://www.4konverta.com/
Set-Cookie: JSESSIONID=47tj3wd4pd9d;Path=/
Set-Cookie: forumauth=MTp4TXBDT0tDNUk0SU56RkNhYjNXRW13PT06MUAxLnJ1;Path=/
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 20
Keep-Alive: timeout=5, max=40
Connection: Keep-Alive
Content-Type: text/plain

как видно здесь все в порядке. Помогите понять в чем проблема?
LightLang Team
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Решено: Авторизация из python скрипта на сайте

Сообщение Portnov »

Заметьте: method=post. А вы делаете get-запрос. Почти наверняка сайт всё-таки проверяет, каким методом переданы данные. Для post-запросов используйте, например, curl, пример есть тут: http://lug-mgn.ru/articles/para-poleznykh-lib-dlya-pitona
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Решено: Авторизация из python скрипта на сайте

Сообщение watashiwa_daredeska »

Код: Выделить всё

import urllib
import urllib2

urllib2.install_opener(urllib2.build_opener(urllib2.HTTPCookieProcessor))
def main() :
    params = urllib.urlencode({
            'login' : "1",
            'password': "1"
            })
    f = urllib2.urlopen(
        "http://www.4konverta.com/login/process",
        params)
    print f.read()
Так лучше?

Portnov писал(а):
15.02.2009 20:15
Заметьте: method=post. А вы делаете get-запрос.
Тут все нормально:
(18.5 urllib -- Open arbitrary resources by URL) писал(а):If the url uses the http: scheme identifier, the optional data argument may be given to specify a POST request (normally the request type is GET).
Спасибо сказали:
Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10

Re: Решено: Авторизация из python скрипта на сайте

Сообщение BlackStar »

watashiwa_darede... писал(а):
16.02.2009 00:16
Так лучше?

Ага, спасибо.
LightLang Team
Спасибо сказали: