Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Python, обращение к сайту

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> Python, обращение к сайту
Имя
Сообщение << Старые топики   Новые топики >>
Python, обращение к сайту - 2009-07-24 00:40:10.833333   
SkylerX

Сообщений: 29
Оценки: 0
Присоединился: 2009-07-21 16:13:04.873333
Нужно на Python'e реализовать вот что:
Ввод определенных данных в форму, что висит на странице. Например ввод логина и пасса для авторизации. Возможно ли такое сделать?
Я пробовал передавать данные при исп. urlopen методом POST. Передавал список вида:
data = [("Login", ""), ("Password", "")] Login и Password - имена <input>'ов, которые принимают логин и пасс.
Перед вызовом urlopen юзал
enc_data = urllib.urlencode(data) Но ничего не выходит.
Post #: 1
RE: Python, обращение к сайту - 2009-07-24 00:45:39.236666   
Persona non grata

Сообщений: 1164
Оценки: 0
Присоединился: 2008-03-25 00:29:28.436666
blаcksun в своё время что-то подобное пытался сделать.

Поюзай поиск, может найдёшь чего.
Post #: 2
RE: Python, обращение к сайту - 2009-07-24 01:23:00.230000   
SkylerX

Сообщений: 29
Оценки: 0
Присоединился: 2009-07-21 16:13:04.873333
Просмотрел все посты blacksun'а. По теме ни 1 не нашел :(
Post #: 3
RE: Python, обращение к сайту - 2009-07-24 01:36:36.840000   
Анон

Сообщений: 632
Оценки: 0
Присоединился: 2008-07-21 22:14:59.233333
http://docs.python.org/howto/urllib2.html
import urllib import urllib2 url = 'http://www.someserver.com/cgi-bin/register.cgi' values = {'name' : 'Michael Foord', 'location' : 'Northampton', 'language' : 'Python' } data = urllib.urlencode(values) req = urllib2.Request(url, data) response = urllib2.urlopen(req) the_page = response.read()
Post #: 4
RE: Python, обращение к сайту - 2009-07-24 01:48:50.730000   
SkylerX

Сообщений: 29
Оценки: 0
Присоединился: 2009-07-21 16:13:04.873333
Спасибо. Но мне кажется, что я что-то не понимаю/не правильно делаю.
Вот допустим на примере: есть сайт lmlab.ru
Мне надо со скрипта залогиниться туда.
Если я в данный момент в Opera и не залогинился туда, то после выполнения скрипта при нажатии кнопки "Обновить" я должен попасть на страницу как залогинившийся, так? Или я чего-то не понимаю? Или как-нибудь по другому можно удостовериться в том, что я залогинился?
Вот код:
(можете использовать этот лог и пасс, если попробуете туда залогиниться :) )
#!/usr/bin/python import urllib, urllib2 url = 'http://www.lmlab.ru/login.shtml' data = urllib.urlencode({'Login': 'ivmak-70@mail.ru', 'Password': '15975315'}) req = urllib2.Request(url, data) response = urllib2.urlopen(req) the_page = response.read() params = urllib.urlencode({'Login': 'ivmak-70@mail.ru', 'Password': '15975315'}) P.S. В одном из обучающих пособий было написано, что отправить данные методом POST можно так:
f = urllib.urlopen("http://site.ru", enc_data) enc_data - данные, которы надо отправить, как data в моем скрипте.
Это способ должен в принципе делать, то что мне надо?
Post #: 5
RE: Python, обращение к сайту - 2009-07-24 02:09:41.076666   
Анон

Сообщений: 632
Оценки: 0
Присоединился: 2008-07-21 22:14:59.233333
Ну я так подозреваю, для того чтобы авторизоваться, придётся принимать cookies, а затем подставлять их в запросы.
Погугли на тему web-clients python..
Post #: 6
RE: Python, обращение к сайту - 2009-07-24 02:30:22.340000   
SkylerX

Сообщений: 29
Оценки: 0
Присоединился: 2009-07-21 16:13:04.873333
По идее мне хватит и того, что я удостоверюсь в том, что логин и пасс прошли. Чтобы не углублятся еще и в обработку cookies.
Вот тут: http://mail.python.org/pipermail/python-list/2001-April/077312.html еще вариант. В коммента написано, что скрипт печатает 200 в случае успеха. Я получаю 200 в терминале при выполнении. Говорит ли это о том, что все пашет? (хочу просто на 100% убедиться от знающих людей :) т.к. сам я в Python'е новичок, то сомневаюсь во многом)
Так же по той ссылке дальше дают такой вариант:
params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0}) data = urllib.urlopen("http://www.musi-cal.com:80", params) # returns a file-like object containing the HTML response file Таким я способом пользовался с самого начала, когда начала копаться в этом. При выполнении такого скрипта получаю:
quote:

&lt;addinfourl at 3082186572L whose fp = &lt;socket._fileobject object at 0xb7b55dbc&gt;&gt;

Расшифровывается ли этот ответ, и если да - есть ли в нем то, что мне нужно? Т.е. положительный ответ на мой запрос.

И еще такой вопрос: есть ли разница в том, как задавать url на страничку - url на сайт, т.е. http://lmlab.ru, или надо на страницу, на которую меня перекидывает при коннекте, т.е. http://www.lmlab.ru/login.shtml? urlopen сам перенаправиться на это адрес?
Post #: 7
RE: Python, обращение к сайту - 2009-07-24 02:50:06.980000   
Анон

Сообщений: 632
Оценки: 0
Присоединился: 2008-07-21 22:14:59.233333

quote:

ORIGINAL: SkylerX

По идее мне хватит и того, что я удостоверюсь в том, что логин и пасс прошли. Чтобы не углублятся еще и в обработку cookies.

ИМХО придётся.

quote:


Вот тут: http://mail.python.org/pipermail/python-list/2001-April/077312.html еще вариант. В коммента написано, что скрипт печатает 200 в случае успеха. Я получаю 200 в терминале при выполнении. Говорит ли это о том, что все пашет? (хочу просто на 100% убедиться от знающих людей :) т.к. сам я в Python'е новичок, то сомневаюсь во многом)

Говорит о том, что сервер принял, и обработал твой запрос.
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
quote:

10.2.1 200 OK

The request has succeeded. The information returned with the response is dependent on the method used in the request, for example:

GET an entity corresponding to the requested resource is sent in the response;

HEAD the entity-header fields corresponding to the requested resource are sent in the response without any message-body;

POST an entity describing or containing the result of the action;

TRACE an entity containing the request message as received by the end server.


quote:


Так же по той ссылке дальше дают такой вариант:
params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0}) data = urllib.urlopen("http://www.musi-cal.com:80", params) # returns a file-like object containing the HTML response file Таким я способом пользовался с самого начала, когда начала копаться в этом. При выполнении такого скрипта получаю:
quote:

&lt;addinfourl at 3082186572L whose fp = &lt;socket._fileobject object at 0xb7b55dbc&gt;&gt;

Расшифровывается ли этот ответ, и если да - есть ли в нем то, что мне нужно? Т.е. положительный ответ на мой запрос.

В нём страничка, которую отдал тебе серверdata.read() http://docs.python.org/library/stdtypes.html#bltin-file-objects
Post #: 8
RE: Python, обращение к сайту - 2009-07-24 02:57:45.030000   
SkylerX

Сообщений: 29
Оценки: 0
Присоединился: 2009-07-21 16:13:04.873333
quote:

ИМХО придётся.

Прийдется из-за того, что это пригодится мне в будущем, или для того, чтобы 100% убедиться?

Наверное все-таки попробую оставить пока так, раз вроде как коннект нормальный. Буду под этим логином теперь выполнять действия, которые мне надо на самом сайте сделать. Потом, как напишу скрипт, выполняющий все действия, выйду из профиля и буду тогда смотреть, работает или нет. Если тогда работать не будет, тогда буду в cookies углубляться.

Большое спасибо за помощь, Анон.
Post #: 9
RE: Python, обращение к сайту - 2009-07-24 15:46:09.726666   
SkylerX

Сообщений: 29
Оценки: 0
Присоединился: 2009-07-21 16:13:04.873333
Еще вопрос: если я отправил странице логин и пасс, и они верны, и я получаю в ответ 200, то разве это не должно означать, что я могу выполнять какие-либо действия на сайте уже как залогинившийся?
Просто вроде данные отправляет, но когда после это пытаюсь зайти на страницу, на которую можно попасть только залогинившись, и читаю исходный код - получаю код первой страницы, где требуется ввести логин и пасс.
Мдаа, по ходу тут все гооораздо труднее, чем я думал :(
P.S. Дайте кто-нибудь пожалуйста сайт, на котором можно это попрактиковать. Чтобы можно было наглядно посмотреть, как это хоть работает, если код верный.
Post #: 10
RE: Python, обращение к сайту - 2009-07-24 22:44:42.813333   
SkylerX

Сообщений: 29
Оценки: 0
Присоединился: 2009-07-21 16:13:04.873333
Продвинулся немного дальше.
Есть еще вопрос (надеюсь кто-нибудь ответит…):
Запрос организовал, куки получил. Куки вида:
quote:

pmp_visitor=92703a1949fb58753bd56c7514ba7a84; expires=Sat, 24-Jul-2010 18:40:54 GMT; path=/, pmp_session=nekum85p74jr8ik408sr902ns7; path=/

Вопрос: какое именно значение мне брать для отправки куки на сайт для авторизации?
Я "вырезал" оттуда и visitor и session, ни с одним ни с другим не пускает дальше страницы авторизации :(
В таком виде я отправлял:
cookie = nekum85p74jr8ik408sr902ns7 Отправлял таким образом:
response = urllib2.Request(url2, data) response.add_header("Cookie", "pmp_session=" + cookie + ";") resp = urllib2.urlopen(response2) Не выходит :(
Post #: 11
Страниц:  [1]
Все форумы >> [Веб-программинг] >> Python, обращение к сайту







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.