Python >> Tutoriel Python >  >> Python Tag >> Requests

Impossible de se connecter à Instagram à l'aide de demandes

Vous pouvez utiliser la version d'authentification 0 - mot de passe simple, pas de cryptage :

import re
import requests
from bs4 import BeautifulSoup

from datetime import datetime

link = 'https://www.instagram.com/accounts/login/'
login_url = 'https://www.instagram.com/accounts/login/ajax/'

time = int(datetime.now().timestamp())

payload = {
    'username': '<USERNAME HERE>',
    'enc_password': f'#PWD_INSTAGRAM_BROWSER:0:{time}:<PLAIN PASSWORD HERE>',  # <-- note the '0' - that means we want to use plain passwords
    'queryParams': {},
    'optIntoOneTap': 'false'
}

with requests.Session() as s:
    r = s.get(link)
    csrf = re.findall(r"csrf_token\":\"(.*?)\"",r.text)[0]
    r = s.post(login_url,data=payload,headers={
        "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36",
        "x-requested-with": "XMLHttpRequest",
        "referer": "https://www.instagram.com/accounts/login/",
        "x-csrftoken":csrf
    })
    print(r.status_code)
    print(r.url)
    print(r.text)

Impressions :

200
https://www.instagram.com/accounts/login/ajax/
{"authenticated": true, "user": true, "userId": "XXXXXXXX", "oneTapPrompt": true, "reactivated": true, "status": "ok"}

Pour ce faire, vous devez effectuer un travail d'enquête sur leur javascript.

Après une petite recherche, j'ai compris qu'ils utilisent AES-GCM avec une longueur de clé de 256 bits, ils ont un préfixe de 100 octets que je ne sais toujours pas de quoi il s'agit, puis ils concatènent le mot de passe et cryptent l'ensemble du message 100 + len(password) .

Vous pouvez en savoir plus sur AES-GCM, obtenir la clé, iv et des données supplémentaires à partir de leur code, et terminer le travail vous-même.

J'espère avoir aidé, bonne chance :)