Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 10, 2015 22:16:38

Notan1310
Зарегистрирован: 2014-09-14
Сообщения: 98
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на vbulletin requests

Добрый вечер. Хочу сделать авторизацию на форуме используя requests, авторизация проходит успешно, но после страницы“Сейчас вы будете перемещены на другую страницу” авторизация теряется. Что мне нужно сделать чтобы авторизация сохранялась на время работы скрипта.

    session = requests.Session()
    resp = session.post("http://searchengines.guru/login.php?do=login", headers=headers, data=auth)
    getMatchesPage = session.get("http://searchengines.guru/", cookies=resp.cookies) 
    pageHtml = html.fromstring(getMatchesPage.text)

Отредактировано Notan1310 (Окт. 10, 2015 22:22:33)

Офлайн

#2 Окт. 11, 2015 08:34:38

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

Авторизация на vbulletin requests

У Вас в переменной auth пара логин\пароль ?

Смотрите что уходит в форму авторизации :

vb_login_username:
vb_login_password:
s:
securitytoken:
do:login
vb_login_md5password:
vb_login_md5password_utf:

Отправляйте и Вы тоже самое. Securitytoken может принимать значение “guest”. Все прекрасно работает :

import requests
import bs4
import hashlib
session = requests.Session()
password = hashlib.md5("your_pass_goes_here".encode('utf-8'))\
    .hexdigest()
login_data = {
    "vb_login_username": "your_user_name_goes_here",
    "vb_login_password": "",
    "s": "",
    "securitytoken": "guest",
    "do": "login",
    "vb_login_md5password": password,
    "vb_login_md5password_utf": password
}
login = session.post("http://searchengines.guru/login.php?do=login", data=login_data)
first_page_ = session.get("http://searchengines.guru/index.php", cookies=login.cookies)
# check login success
soup = bs4.BeautifulSoup(first_page_.content)
print(soup.find_all("a", attrs={"href": "member.php?u=1094837"}))


Отредактировано ayb (Окт. 11, 2015 09:14:03)

Офлайн

#3 Окт. 11, 2015 17:04:52

Notan1310
Зарегистрирован: 2014-09-14
Сообщения: 98
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на vbulletin requests

Я правильно понимаю что в следующей строке у вас все еще есть авторизация?

first_page_ = session.get("http://searchengines.guru/index.php", cookies=login.cookies)
У меня она теряется. Я смотрю значение переменных и login еще содержит мою авторизацию, но first_page_ уже нет.

# -*- coding: utf-8 -*-
 
from __future__ import unicode_literals
 
import sqlite3
import sqlite3 as lite
from lxml import etree, html
import requests
import json
import time
 
class SearchEnginesCollection:
    def __init__(self, title, href):
        self.titles = title
        self.hrefs = href
 
 
def get_new_post():
    login = 'Свой логин'
    password = ''
    s = ''
    securitytoken = 'guest'
    do = 'login'
    vb_login_md5password = 'Свой password md5 '
    vb_login_md5password_utf = 'Свой password md5 '
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; rv:40.0) Gecko/20100101 Firefox/40.0'}
    auth = {'vb_login_username': login, 'vb_login_password': password, 's' : s, 'securitytoken' : securitytoken, 'do' : do, 'vb_login_md5password' : vb_login_md5password , 'vb_login_md5password_utf' : vb_login_md5password_utf}
 
 
    session = requests.Session()
    resp = session.post("http://searchengines.guru/login.php?do=login", headers=headers, data=auth)
 
    getMatchesPage = session.get("http://searchengines.guru/")
    pageHtml = html.fromstring(getMatchesPage.text)
    userName = pageHtml.xpath(".//*[@class='smallfont']/strong/a/text()")

Офлайн

#4 Окт. 11, 2015 22:31:44

Notan1310
Зарегистрирован: 2014-09-14
Сообщения: 98
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на vbulletin requests

ayb Авторизация проходит, но исчезает на следующем месте.

first_page_ = session.get("http://searchengines.guru/index.php", cookies=login.cookies)
Ничего не могу понять!! Быть может опций есть какие особенные?

Офлайн

#5 Окт. 12, 2015 04:47:07

Notan1310
Зарегистрирован: 2014-09-14
Сообщения: 98
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на vbulletin requests

Видимо проблема в куки. Переписал авторизацию практически так же на C# и все успешно работает.
У кого нибудь есть идей почему может не работать на python? Авторизацию проводил на двух форумах vBulletin 3.8.7 используя requests и на обоих не достиг успеха.

Офлайн

#6 Окт. 12, 2015 06:13:43

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Авторизация на vbulletin requests

Обратите внимание на форму входа - там выполняется некий JS, а именно считается md5 хеш сумма на введенные вами данные. Считается как то по особому (JS md5hash функция).
Глубоко не смотрел, но похоже что перенесли некоторую логику с сервера на клиента. Может это еще некий элемент защиты.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Окт. 12, 2015 07:47:39

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

Авторизация на vbulletin requests

Да просто на сервере не хотят они считать md5, ничего особенного там нет.

Офлайн

#8 Окт. 12, 2015 14:08:42

Notan1310
Зарегистрирован: 2014-09-14
Сообщения: 98
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на vbulletin requests

Подсказали в чем дело. Просто я не правильно присваиваю заголовки

Было так

resp = session.post("http://searchengines.guru/login.php?do=login", headers=headers, data=auth)
Нужно так
session.headers = headers

Всем огромное спасибо за отклик!

Офлайн

#9 Янв. 29, 2017 22:04:16

kxekxe
От:
Зарегистрирован: 2011-01-19
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на vbulletin requests

Помогите разобраться с моей авторизацией.
пытаюсь авторизоваться на forumhouse.ru, набросал следующий код, это уже последний вариант, идей больше нет.

 # -*- coding: utf-8 -*-
import requests
url = 'https://www.forumhouse.ru/threads/299347/'
auth_url = 'https://www.forumhouse.ru/auth/login?redirect_uri=www.forumhouse.ru/'
with requests.Session() as c:
	username = 'shkipcc@mail.ru'
	password = '123456789di'
	c.get(auth_url)
	for key in c.cookies.keys():
		print '%s: %s' % (key, c.cookies[key])
	csrftoken = c.cookies['uidfh']
	post_data = dict(csrfmiddlewaretoken=csrftoken, 
						username=username, 
						password=password, 
						next='/')
	c.headers={'referer':'www.forumhouse.ru/'}
	c.post(auth_url, data=post_data)
	page = c.get(url, cookies=c.cookies)
	print u'не авторизовался' if 'login?redirect_uri' in page.text else u'авторизовался'
никак не авторизуется, что я мог упустить?



Офлайн

#10 Янв. 30, 2017 17:51:37

aiscy
Зарегистрирован: 2015-06-17
Сообщения: 52
Репутация: +  9  -
Профиль   Отправить e-mail  

Авторизация на vbulletin requests

 # -*- coding: utf-8 -*-
import requests
import re
with requests.Session() as c:
    resp = c.get('https://www.forumhouse.ru/auth/login')
    token = re.findall(r'<meta.*?value=\"(.*)\">', resp.text)[0]
    resp = c.post('https://www.forumhouse.ru/auth/login?redirect_uri=www.forumhouse.ru/',
                        params=dict(login='shkipcc@mail.ru', password='123456789di', _token=token))
    print u'не авторизовался' if 'login?redirect_uri' in resp.text else u'авторизовался'
Так работает?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version