@MajorTom69

Как выполнить вход в аккаунт instagram без использования api?

Нужно выполнить вход в аккаунт 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. Спасибо.
  • Вопрос задан
  • 665 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы