subzeroid / instagrapi

🔥 The fastest and powerful Python library for Instagram Private API 2024
https://hikerapi.com/p/bkXQlaVe
MIT License
4.21k stars 667 forks source link

First login #86

Closed 07h closed 3 years ago

07h commented 3 years ago

Hi. I have this question. How do I log into my account FIRST time with my user-agent and device_settings when I don't have cookies yet?

Right now, the way it works is that the first login like

cl = Client()
cl.login(ACCOUNT_USERNAME, ACCOUNT_PASSWORD)

...The default user-agent and device_settings are used. Which is not good (all instagrapi users have the same UA first)

07h commented 3 years ago

И напишу лучше по-русски. Как выполнить ПЕРВЫЙ логин в аккаунт со своим user-agent и device_settings когда еще нет кукис?

Сейчас все работает так, что при первом логине типа

cl = Client() cl.login(ACCOUNT_USERNAME, ACCOUNT_PASSWORD)

...используются user-agent и device_settings по умолчанию. Что не очень хорошо (все пользователи instagrapi вначале имеют один UA). И это может быть фудпринтом для последующей заморозки аккаунта инстаграма.

adw0rd commented 3 years ago

@07h согласен что надо исправить, сможете сами?

07h commented 3 years ago

@adw0rd я начинающий и сейчас пытаюсь разобраться, как все работает. Когда я делаю фейк-настройки без кукис типа таких

settings = {
   "uuids": {
      "phone_id": "57d64c41-a916-3fa5-bd7a-3796c1dab122",
      "uuid": "8aa373c6-f316-44d7-b49e-d74563f4a8f3",
      "client_session_id": "6c296d0a-3534-4dce-b5aa-a6a6ab017443",
      "advertising_id": "8dc88b76-dfbc-44dc-abbc-31a6f1d54b04",
      "device_id": "android-e021b636049dc0e9"
   },
   "cookies":  {},  # set here your saved cookies
   "last_login": 1596069420.0000145,
   "device_settings": {
      "cpu": "h1",
      "dpi": "640dpi",
      "model": "h1",
      "device": "RS988",
      "resolution": "1440x2392",
      "app_version": "117.0.0.28.123",
      "manufacturer": "LGE/lge",
      "version_code": "168361634",
      "android_release": "6.0.1",
      "android_version": 23
   },
   "user_agent": "Instagram 117.0.0.28.123 Android (23/6.0.1; ...US; 168361634)"
}

cl = Client(settings)

то получаю при логине message:'400 Client Error: Bad Request for url: https://i.instagram.com/api/v1/accounts/login/'

Не понимаю, что не так

07h commented 3 years ago

В общем, весь день дебажил либу и изучал логику поведения инсты.

При первом логине можно заменить юзер-агент, но через настройку девайса

settings = {
    "device_settings": {
        "app_version": "135.0.0.1.1",
        "android_version": 29,
        "android_release": 10,
        "dpi": "420dpi",
        "resolution": "1080x2121",
        "manufacturer": "motorola",
        "device": "moto g(8) power",
        "model": "sofiar",
        "cpu": "qcom",
        "version_code": "238854399",
    },
}

cl = Client(settings)

Юзер-агент будет сгенерирован. И первый логин будет проходить с этими данными. Данные для девайсов можно взять отсюда https://user-agents.net/applications/instagram-app

Но вот какая беда: почему-то очень часто выпадало message:'400 Client Error: Bad Request for url: https://i.instagram.com/api/v1/accounts/login/' Часто, но не всегда. И я понять не мог, в чем дело. Какие-то данные инста принимала, а какие-то нет.

Оказалось, что именно для этого приватного API приложения /api/v1/accounts/login/ на стороне инсты стоит типа фильтр: он не принимает версию приложения младше 135 (!).

например, ОК - это 135.0.0.1.1, 22.0.0.1.1, 111.0.0.1.1 и так далее. А вот уже 145.0.0.1.1 выдаст ошибку 400.

Судя по всему, у инсты на версиях где-то 135-140 поменялось API. И именно это уже устаревшее по сути API используется в instagrapi. (Сейчас актуальная версия прилы 169).

Вряд ли инста прям так легко и быстро откажется от зоопарка разных устройств, на которых она давно не обновлялась, но имейте в виду.

ucalyptus2 commented 3 years ago

Translated @07h comments


In general, I debugged the lib all day and studied the logic of the insta's behavior.

At the first login, you can replace the user agent, but through the device setting

syntax-----

A user agent will be generated. And the first login will be with this data. Data for devices can be taken from here https://user-agents.net/applications/instagram-app

But here's the trouble: for some reason, very often the message: '400 Client Error: Bad Request for url: https://i.instagram.com/api/v1/accounts/login/' appears often, but not always. And I could not understand what was the matter. Insta accepted some data, but not.

It turned out that this particular private API of the application / api / v1 / accounts / login / has a filter type on the insta side: it does not accept an application version younger than 135 (!).

for example, OK is 135.0.0.1.1, 22.0.0.1.1, 111.0.0.1.1, and so on. But now 145.0.0.1.1 will give error 400.

Apparently, the insta has changed the API on versions somewhere around 135-140. And it is this API that is already deprecated in essence that is used in instagrapi. (The current version is 169).

It is unlikely that Insta will just so easily and quickly abandon the zoo of various devices on which it has not been updated for a long time, but keep in mind.

rewiaca commented 3 years ago

@07h

Юзер-агент будет сгенерирован. И первый логин будет проходить с этими данными. Данные для девайсов можно взять отсюда https://user-agents.net/applications/instagram-app например, ОК - это 135.0.0.1.1, 22.0.0.1.1, 111.0.0.1.1 и так далее. А вот уже 145.0.0.1.1 выдаст ошибку 400.

Взять свой user agent можно если перейти на iplogger в webview инсты. Но всеравно не пускает. Не понятно правда откуда version_code и android release брать, но вот мой юзер-агент и конфиг соответственно:

Mozilla/5.0 (Linux; Android 9; GM1900 Build/PKQ1.190110.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.181 Mobile Safari/537.36 Instagram 175.1.0.25.119 Android (28/9; 420dpi; 1080x2134; OnePlus; GM1900; OnePlus7; qcom; ru_RU

settings = {
    "device_settings": {
        "app_version": "175.1.0.25.119",
        "android_version": 29,
        "android_release": 9,
        "dpi": "420dpi",
        "resolution": "1080x2134",
        "manufacturer": "OnePlus",
        "device": "GM1900",
        "model": "OnePlus7",
        "cpu": "qcom",
        "version_code": "238854399",
    },
}
adw0rd commented 3 years ago

@07h перечитал ваши комментарии и пояснения, спасибо за проведенную работу!

Судя по всему, у инсты на версиях где-то 135-140 поменялось API. И именно это уже устаревшее по сути API используется в instagrapi. (Сейчас актуальная версия прилы 169).

Вряд ли инста прям так легко и быстро откажется от зоопарка разных устройств, на которых она давно не обновлялась, но имейте в виду.

Я сейчас переделываю instagrapi под "169.3.0.30.135"

adw0rd commented 3 years ago

@rewiaca я решил разобраться в сложившейся ситуации, там много чего поменялось в новых версиях, поэтому переписывать придется много логики

BolatMukashev commented 3 weeks ago

у кого нибудь получилось авторизироваться? что странно на одном аккаунте заходит без проблем, а на другом не заходит вообще