Возникла необходимость написания парсера для выведения всех публикаций по подписке. Однако столкнулся с проблемой в самом начале: авторизация. Далее распишу общий подход к решению данной проблемы с приведением основных заголовков и данных, отправляемых вместе с запросом:
1) GET-запрос на страницу авторизации
2) POST-запрос на
https://account.habr.com/ajax/validate/email/
headers = {
"Accept":"*/*",
"Accept-Encoding" : "gzip, deflate, br",
"Accept-Language":"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
"Connection":"keep-alive",
"Content-Length":"43",
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
#"Cookie":,
"DNT":"1",
"Host":"account.habr.com",
"Origin":"https://account.habr.com",
"Referer":"https://account.habr.com/login/?state=<последовательность>&consumer=habr&hl=ru_RU",
"User-Agent":"Mozilla/5.0 Gecko/20100101 Firefox/75.0",
"X-Requested-With":"XMLHttpRequest"
}
data = {
"value":<почта>,
"name":"email"
}
Примечание: в качестве ответа прилетает: {"messages":"ok"}
3) POST-запрос на
https://account.habr.com/ajax/login/
headers = {
"Host": "account.habr.com",
"User-Agent": "Mozilla/5.0 Gecko/20100101 Firefox/75.0",
"Accept": "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01",
"Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding": "gzip, deflate, br",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest",
"Content-Length": "170",
"Origin": "https://account.habr.com",
"DNT": "1",
"Connection": "keep-alive",
"Referer": "https://account.habr.com/login/?state=<последовательность>&consumer=habr&hl=ru_RU",
"Cookie":
}
data = {
"state":
<последовательность>,
"consumer":"habr",
"email":
<почта>,
"password":
<пароль>,
"captcha":"",
"g-recaptcha-response":"",
"captcha_type":"recaptcha"
}
Примечание: в качестве ответа прилетает: {"messages":"ok"}
4) GET-запрос к
https://habr.com/ru/feed/ с cookie(полученные из шага №3)
Однако все же выводятся общие публикации, а не по подписке. Предполагаю, что вся проблема с токенами, т.к. нет полного представления, как ими пользоваться. Или, может быть, проблема в общем подходе? Буду признателен за любую информацию. Спасибо, что уделили время!
UPDATE: Ответ в п.3 при корректной работе должен возвращать json, начинающийся с window.location.href