web-dev-qa-db-fra.com

Comment utiliser les cookies dans Python Requests

J'essaie de me connecter à une page et d'accéder à un autre lien de la page.

payload={'username'=<username>,'password'=<password>}
with session() as s:
    r = c.post(<URL>, data=payload)
    print r
    print r.content

Cela me donne une erreur "405 non autorisé". J'ai vérifié les détails de la méthode de publication à l'aide de chrome outils de développement et pouvais voir une api (URL/api/auth). J'ai posté sur cette URL avec la charge utile et cela fonctionnait et j'obtenais une réponse. semblable à ce que je pouvais voir dans le développeur.

Malheureusement, lorsque j'essaie d'obtenir une autre URL après la connexion, je reçois toujours le contenu de la page de connexion. Pourquoi le login ne colle-t-il pas? Devrais-je utiliser des cookies? Je suis un débutant, donc je ne sais pas vraiment comment travailler avec les cookies.

27
user1474157

Vous pouvez utiliser un objet de session. Il stocke les cookies pour que vous puissiez faire des demandes et les gère pour vous.

s = requests.Session() 
# all cookies received will be stored in the session object

s.post('http://www...',data=payload)
s.get('http://www...')

Docs: http://docs.python-requests.org/en/latest/user/advanced/

Vous pouvez également enregistrer les données de cookie dans un fichier externe, puis les recharger pour que la session soit persistante sans avoir à vous connecter à chaque fois que vous exécutez le script:

Comment enregistrer des cookies de requêtes (python) dans un fichier?

42
gtalarico

De la documentation :

  1. obtenir un cookie de la réponse

    url = 'http://example.com/some/cookie/setting/url'
    r = requests.get(url)
    r.cookies
    

    {'example_cookie_name': 'example_cookie_value'}

  2. redonner le cookie au serveur lors d'une demande ultérieure

    url = 'http://httpbin.org/cookies'
    cookies = dict(cookies_are='working')
    r = requests.get(url, cookies=cookies)`
    
14
Freek Wiekmeijer