@wows15
Собственно, ЧЯДНТ?
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. Только логин и пароль и спокойно пускает одним запросом.
Решения вопроса 1
@MinTnt
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. И вуаля.
5
комментариев
Ответы на вопрос 1
@dimonchik2013