Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Python: Web

Войти
Регистрация
Восстановить пароль
 
weblord
1 / 1 / 0
Регистрация: 16.10.2016
Сообщений: 111
#1

POST запросы - Python

21.12.2016, 15:42. Просмотров 282. Ответов 3
Метки нет (Все метки)

Всем привет, не могу понять нюанс работы с POST запросами. Например, я хочу авторизоваться на Хабре при помощи POST запроса (возьмем библиотеку Grab для примера, хотя можно и requests). При POST запросе, как я понимаю, используются словари для передачи данных (в формате ключ:значение). В "значение", выходит, надо писать, что я хочу передать (в случае авторизации на Хабре - пароль и логин для авторизации), а вот в "ключ" надо передать данные, какому элементу я их адресую (формам для ввода логина и пароля). Так вот вопрос - как правильно указывать элемент, куда я хочу передать данные? По атрибуту name, id, class, XPath или как?

P. S. Поправьте, если я где-то глупость написал, только разбираюсь)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2016, 15:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос POST запросы (Python):

POST запросы в Django - Python
Добрый вечер. Появилась проблема, надеюсь на ваши подсказки:) Django. Создал модель, форму, вьюху, все обрабатывается и записывается в...

Post-запросы через Proxy - Python
Вот код: import urllib import urllib2 import requests url = 'https://auth.mail.ru/cgi-bin/auth?from=splash' password = '*****'...

POST AJAX запросы bottlepy - Python
Добрый день всем, кто может подсказать каким образом можно разобрать данный запрос на web-framework Bottlepy, доки все перерыл, но кроме...

Про POST запросы в библиотеке requests python - Python
Пишу программу на Python, для загрузки платежных документов на сайт zakupki.gov.ru (используется протокол tls, тело документа в xml) ...

Как обойти ajax-запросы и сделать POST-отправку новости? - Python
Имеется сайт zagrus.ru Код публикатора новостей. # -*- coding: cp1251 -*- import urllib import urllib2 import lxml import...

Интернет - запросы на python1.4.5 - Python
Здравствуйте. Вот не могу никак разобраться как оно тут работает, точнее у меня вообще не работает ни с одним модулем. Как правильно? ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alex925
2506 / 2157 / 507
Регистрация: 19.03.2012
Сообщений: 8,358
21.12.2016, 16:36 #2
Вот на пример так можешь авторизоваться тут. На хабре примерно так же будет скорее всего.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import lxml.html
import requests
 
login = '<твой логин>'
password = '<твой пароль>'
url = 'http://www.cyberforum.ru'
 
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20100101 Firefox/14.0.1',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language':'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
    'Accept-Encoding':'gzip, deflate',
    'Connection':'keep-alive',
    'DNT':'1'
}
session = requests.session()
data = session.get(url, headers=headers).content
page = lxml.html.fromstring(data)
 
form = page.forms[0]
form.fields['vb_login_username'] = login
form.fields['vb_login_password'] = password
 
response = session.post(url + form.action, data=form.form_values())
print(session.get(url).text)
1
Garry Galler
760 / 582 / 158
Регистрация: 28.10.2013
Сообщений: 1,374
21.12.2016, 16:47 #3
На примере авторизации на cyberforum:
... Чуть-чуть опоздал с сообщением и способ №1 уже представлен в посте alex925, но у себя убирать не буду, пусть останется для сравнения.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import lxml.html
import requests
 
login = 'login'
password = 'password'
url = 'http://www.cyberforum.ru/'
 
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20100101 Firefox/14.0.1',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language':'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
    'Accept-Encoding':'gzip, deflate',
    'Connection':'keep-alive',
    'DNT':'1'
}
session = requests.Session()
 
# способ №1 - используем поля форм
def auth_1():
    # отправляем первичный запрос главной страницы
    data = session.get(url, headers=headers).content
    page = lxml.html.fromstring(data) #  получаем разобранное дерево элементов
    form = page.forms[0]  # берем самую первую форму - то, что брать нужно именно ее - нужно убеждаться эмпирическим путем, заглянув в исходный код страницы, так как нужная форма может и не быть первой
    form.fields['vb_login_username'] = login      # имена полей узнаем из исходного кода страницы
    form.fields['vb_login_password'] = password
 
    r = session.post("{}{}".format(url,form.action), data=form.form_values())
    return r
 
# способ № 2 - тратить время на отправку первичного запроса, чтобы получить экземпляр формы не будем
# мы просто 'подсмотрим', что отправляет браузер и сделаем точно также
 
def auth_2():
    # а браузер отправляет post запросом именно это
    # как мы это узнали? это отдельный вопрос - так как вариантов масса, от встроенных средств разработчика в самих браузерах, до инструментов типа HTTP Analyzer
    data = {
    'vb_login_username':login,
    'vb_login_password':password,
    'securitytoken':'guest',            
    'do': 'login' 
    }
    
    r = session.post('{}{}'.format(url,'/login.php?do=login'), data=data)
    return r
 
   
#r = auth_1()
r = auth_2()
 
# смотрим, что нам прислали в "печеньках"
print(r.status_code)
for k,v in r.cookies.items():
    print(k,v,sep="=")
 
# а так мы проверяем, что залогинились    
# откуда мы узнали, что проверять нужно на строчку vbseo_loggedin в куках? 
# правильно. оттуда же, откуда и все и остальное
 
if 'vbseo_loggedin' in r.cookies and r.cookies['vbseo_loggedin']=='yes':
    print('Мы вошли')     
else:
    print('Печалька')
1
weblord
1 / 1 / 0
Регистрация: 16.10.2016
Сообщений: 111
21.12.2016, 17:06  [ТС] #4
Спасибо, буду разбираться!)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2016, 17:06
Привет! Вот еще темы с ответами:

Post tastypie - Python
Всех с Новым годом! Собственно такой вопрос, есть приложение на Android, которое посылает запрос на сервер(ну к примеру нужно отдать...

Python 3 mod_wsgi get, post - Python
Как работать с этими запросами? Аля php: d = $_GET Добавлено через 27 минут get кажется нашел 'QUERY_STRING': 'd=asd&amp;d=hj'

Http-post возвращает 400 - Python
Добрый вечер. Нужно передать голосовой файл и распознать текст. Использую технологию Yandex SpeechKit Cloud. ...

Считать POST и вывести на экран - Python
Поднял Apache + Python Отправляем post из файла №1 &lt;form action=&quot;http://python.loc/test.py“ method=”post“&gt; &lt;input type=”text“...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.12.2016, 17:06
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru