Форум сайта python.su
Добрый вечер. Хочу сделать авторизацию на форуме используя 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)
Офлайн
У Вас в переменной auth пара логин\пароль ?
Смотрите что уходит в форму авторизации :
vb_login_username:
vb_login_password:
s:
securitytoken:
do:login
vb_login_md5password:
vb_login_md5password_utf:
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)
Офлайн
Я правильно понимаю что в следующей строке у вас все еще есть авторизация?
first_page_ = session.get("http://searchengines.guru/index.php", cookies=login.cookies)
# -*- 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()")
Офлайн
ayb Авторизация проходит, но исчезает на следующем месте.
first_page_ = session.get("http://searchengines.guru/index.php", cookies=login.cookies)
Офлайн
Видимо проблема в куки. Переписал авторизацию практически так же на C# и все успешно работает.
У кого нибудь есть идей почему может не работать на python? Авторизацию проводил на двух форумах vBulletin 3.8.7 используя requests и на обоих не достиг успеха.
Офлайн
Обратите внимание на форму входа - там выполняется некий JS, а именно считается md5 хеш сумма на введенные вами данные. Считается как то по особому (JS md5hash функция).
Глубоко не смотрел, но похоже что перенесли некоторую логику с сервера на клиента. Может это еще некий элемент защиты.
Офлайн
Да просто на сервере не хотят они считать md5, ничего особенного там нет.
Офлайн
Подсказали в чем дело. Просто я не правильно присваиваю заголовки
Было так
resp = session.post("http://searchengines.guru/login.php?do=login", headers=headers, data=auth)
session.headers = headers
Офлайн
Помогите разобраться с моей авторизацией.
пытаюсь авторизоваться на 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'авторизовался'
Офлайн
# -*- 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'авторизовался'
Офлайн