@wows15
В автоматизации сила, брат

Что я делаю не так?

Никак не могу одолеть сайт bablobit.ru. А точнее войти в него с помощью запросов. Я все подделал, абсолютно всё. И заголовки и xfToken. Все под копирку как в DevTools. Но не работает. Выдаёт стартовую страницу без логина.

Собственно, ЧЯДНТ?

from requests import Session
from bs4 import BeautifulSoup

from convert_headers import convert_headers

s = Session()
s.headers = convert_headers({
	"Заголовки запроса (416 б)": {
		"headers": [
			{
				"name": "Accept",
				"value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
			},
			{
				"name": "Accept-Encoding",
				"value": "gzip, deflate, br"
			},
			{
				"name": "Accept-Language",
				"value": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3"
			},
			{
				"name": "Cache-Control",
				"value": "no-cache"
			},
			{
				"name": "Connection",
				"value": "keep-alive"
			},
			{
				"name": "Host",
				"value": "bablobit.ru"
			},
			{
				"name": "Pragma",
				"value": "no-cache"
			},
			{
				"name": "Upgrade-Insecure-Requests",
				"value": "1"
			},
			{
				"name": "User-Agent",
				"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0"
			}
		]
	}
})

r = s.get('https://bablobit.ru/index.php?login/')

data = {
    'login': 'user',
    'password': 'pass',
    '_xfRedirect': '/index.php',
    '_xfToken': str(BeautifulSoup(r.text, 'lxml').select_one('[name="_xfToken"]')['value'])
}

r = s.post('https://bablobit.ru/index.php?login/login=', data=data)

with open('1.html', 'w', encoding='utf-8') as f:
    f.write(r.text)

s.close()


Причём похожий сайт парсил s1.sharewood.cc. Там тоже xenoforo, но чтобы залогиниться не нужны ни headers, ни xfToken. Только логин и пароль и спокойно пускает одним запросом.
  • Вопрос задан
  • 1166 просмотров
Решения вопроса 1
MinTnt
@MinTnt
Просто в данном запросе "https://bablobit.ru/index.php?login/login" присутствует redirect. А как мы знаем, когда в пост запросе присуствует redirect, он будет возращать html.
with open('1.html', 'w', encoding='utf-8') as f:
    f.write(r.text)

Т.е. предпологаю что у тебя здесь вывелось html с окном для входа.

Для того чтоб прочитать redirect, считываем r.history. А так как обычно на подобных форумах переадресация лишь одна, то можем считываем лишь первый, а так же можно вывести headers. Обычно на подобных, но чуть усложнённых версиях, как раз в headers генерируется session , который по дефолту обычно существует 30 дней. Благодаря этому session token потом при помощи get запросов, можем получать xftoken - который обычно по дефолту существует ~12 часов, или чуть больше.

Так что для обработки пост запроса, можем использовать такой вот вид. Как раз таки в headers попадаются или токен сессии, или статус входа, не помню точно, относительно давно это было.
print(r.history[0].headers, r.history[0].text)


Update: Вот к примеру, в случае успешной авторизации, у r.status_code - будет равно 303. А в r.history[0].headers выведет что-то по типу
Set-Cookie: xf_user=85376%2CH4tard146PUjjcLAYflx8-eovp8AmraDqd0lkf-A; expires=Thu, 28-Apr-2022 08:01:40 GMT; Max-Age=31536000; path=/; secure; HttpOnly
Set-Cookie: xf_session=73Ox5QmBBLZEpYBL940YTm_iMX7u2ufR; path=/; secure; HttpOnly

Эти set-cookie, берём, и добавляем к изначальным headers--> cookie. И вуаля.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
Postman юный хацкер уже освоил?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы