Нужно выполнить вход в аккаунт instagram, эмулируя запросы бразуера. Нашел реализацию на python и возникло желание реализовать тоже на JavaScript.
В python версии request.session сам управляет всеми cookie и headers и все отлично работает:
def login(self):
self.login_post = {
'username': self.user_login,
'password': self.user_password
}
self.s.headers.update({
'Accept': '*/*',
'Accept-Language': self.accept_language,
'Accept-Encoding': 'gzip, deflate, br',
...
})
r = self.s.get(self.url)
self.s.headers.update({'X-CSRFToken': r.cookies['csrftoken']})
time.sleep(5 * random.random())
login = self.s.post(
self.url_login, data=self.login_post, allow_redirects=True)
self.s.headers.update({'X-CSRFToken': login.cookies['csrftoken']})
self.csrftoken = login.cookies['csrftoken']
self.s.cookies['ig_vw'] = '1536'
self.s.cookies['ig_pr'] = '1.25'
self.s.cookies['ig_vh'] = '772'
self.s.cookies['ig_or'] = 'landscape-primary'
time.sleep(5 * random.random())
if login.status_code == 200:
r = self.s.get('https://www.instagram.com/')
finder = r.text.find(self.user_login)
if finder != -1:
ui = UserInfo()
self.user_id = ui.get_user_id_by_login(self.user_login)
self.login_status = True
log_string = '%s login success!' % (self.user_login)
self.write_log(log_string)
else:
self.login_status = False
self.write_log('Login error! Check your login data!')
else:
self.write_log('Login error! Connection error!')
Попытка с js:
var log_post = this.log_post = {
'username': uname,
'password': psswd
}
var headers = this.headers = {
'Accept': '*/*',
'Accept-Language': accept_language,
'Accept-Encoding': 'gzip, deflate, br',
...
}
axios.get(url)
.then(function(res) {
var data = res.headers['set-cookie'];
for (var i = 0; i < data.length; i++) {
if (data[i].includes('csrftoken')) {
headers['X-CSRFToken'] = data[i].split(';')[0].split('=')[1];
console.log(headers)
}
}
})
.catch(function(err) {
console.log(err)
})
setTimeout(function() {
axios({
method: 'post',
url: url_login,
data: log_post,
headers: headers
})
.then(function(response) {
console.log(response.headers['set-cookie']);
})
.catch(function(error) {
console.log(error);
});
}, 5000)
Данный код возвращает из post запроса статус 200, но аутентификация проводится неуспешно, очень нуждаюсь в подробном пояснении как реализовать это в JS. Спасибо.