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

Obtenir un jeton CSRF à l'aide de requêtes python

Voir l'exemple de code suivant. Vous pouvez l'utiliser directement pour vous connecter à un site Web qui utilise uniquement des cookies pour stocker les informations de connexion.

import requests

LOGIN_URL = 'https://examplenotarealpage.com'
headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}

response = requests.get(LOGIN_URL, headers=headers, verify=False)

headers['cookie'] = '; '.join([x.name + '=' + x.value for x in response.cookies])
headers['content-type'] = 'application/x-www-form-urlencoded'
payload = {
    'username': 'user_name',
    'password': 'randompass123'
}

response = requests.post(LOGIN_URL, data=payload, headers=headers, verify=False)
headers['cookie'] = '; '.join([x.name + '=' + x.value for x in response.cookies])

Il y a quelques emplacements possibles du CSRF jeton. Différents sites Web utilisent différentes manières de le transmettre au navigateur. En voici quelques-uns :

  • Il peut être accompagné d'en-têtes de réponse. Dans ce cas, il est facile de l'obtenir.
  • Parfois, la méta de la page contient le jeton CSRF. Vous devez analyser le contenu html de la page pour l'obtenir. Trouvez le bon sélecteur CSS pour cela. Voir un exemple :

    from bs4 import BeautifulSoup
    soup = BeautifulSoup(response.text, 'lxml')
    csrf_token = soup.select_one('meta[name="csrf-token"]')['content']
    
  • Il peut être à l'intérieur d'une balise de script avec du code JavaScript. L'obtenir sera délicat. Mais, vous pouvez toujours utiliser regex pour l'isoler.