Найти - Пользователи
Полная версия: Авторизация на vbulletin requests
Начало » Python для новичков » Авторизация на vbulletin requests
1 2
Notan1310
Добрый вечер. Хочу сделать авторизацию на форуме используя 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)

ayb
У Вас в переменной 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"}))


Notan1310
Я правильно понимаю что в следующей строке у вас все еще есть авторизация?
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()")
Notan1310
ayb Авторизация проходит, но исчезает на следующем месте.
first_page_ = session.get("http://searchengines.guru/index.php", cookies=login.cookies)
Ничего не могу понять!! Быть может опций есть какие особенные?
Notan1310
Видимо проблема в куки. Переписал авторизацию практически так же на C# и все успешно работает.
У кого нибудь есть идей почему может не работать на python? Авторизацию проводил на двух форумах vBulletin 3.8.7 используя requests и на обоих не достиг успеха.
JOHN_16
Обратите внимание на форму входа - там выполняется некий JS, а именно считается md5 хеш сумма на введенные вами данные. Считается как то по особому (JS md5hash функция).
Глубоко не смотрел, но похоже что перенесли некоторую логику с сервера на клиента. Может это еще некий элемент защиты.
ayb
Да просто на сервере не хотят они считать md5, ничего особенного там нет.
Notan1310
Подсказали в чем дело. Просто я не правильно присваиваю заголовки

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

Всем огромное спасибо за отклик!
kxekxe
Помогите разобраться с моей авторизацией.
пытаюсь авторизоваться на 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'авторизовался'
никак не авторизуется, что я мог упустить?
aiscy
 # -*- 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'авторизовался'
Так работает?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB