Posté(e) 26 janvier 20215 a Salut 0, Aujourd'hui petit tuto sur les bases de la librairie 'requests' de python. C'est une librairie très utile que j'utilise presque tous les jours donc je vous partages les connaissances que j'ai acquise aux cours de mon utilisation La structure d'une requête : Une requête est divisée en deux parties : son entête et son contenue. A partir de maintenant on utilisera leur appellation anglaise header et content. Pour simplifier voyez l'header comme une sorte de titre à votre requête. Il va permettre au serveur de savoir comment gérer votre requête avec par exemple des infos sur : qui l'envoie, qu'est-ce qu'elle contient, etc ... C'est dans les headers que sont envoyés les cookies. Le content c'est ce que vous voulez envoyer au serveur, votre formulaire par exemple. L'utilisation de 'requests' : On peut diviser l'utilisation de requests en deux partie : Les requêtes simples et la multitude de requêtes. Dans le premier cas on va définir les headers avant chaque requête. Mais imaginons que nous voulons nous connecter au serveur avant d’accéder à une ressource. Il y a donc deux requêtes à réaliser, l'une pour la connexion et l'autre pour l'accès aux données sachant que cette dernière à besoin des informations de la première. Dans ce cas-ci nous allons utiliser une "session" ce qui va permettre de garder les informations reçu lors de la première requêtes et des les envoyer lors de la seconde. Pour créer une session, rien de plus simple : import requests session = requests.Session() Première requête : Nous allons maintenant faire notre première requête ! Nous allons récupérer l'heure. import requests r = requests.get('http://worldclockapi.com/api/json/est/now') print(r.text) Quelques petites précisions : - Le 'get' définis le type de requête à envoyer. Si le serveur attendais une requête post on le remplace juste par 'post'. - Le '.text' permet juste de récupérer le content de la réponse du serveur qui est stockée dans 'r'. Si vous avez testé ce code vous avez peut-être remarqué que la réponse est en json. Pour pouvoir l'utiliser il va falloir ajouter ceci : import requests import json r = requests.get('http://worldclockapi.com/api/json/est/now') reponse_en_json = json.loads(r.text) print(reponse_en_json['currentDateTime']) Voilà, vous avez récupéré l'heure ! Mais les headers ? Jusque là nous avons pas spécifier d'headers car ceux généré automatiquement par requests suffisaient. Mais si ce n'était pas le cas, comment je fais ? import requests import json custom_headers = { 'User-Agent': 'monuseragent' } r = requests.get('http://worldclockapi.com/api/json/est/now', headers=custom_headers) reponse_en_json = json.loads(r.text) print(reponse_en_json['currentDateTime']) Dans ce code j'ai modifié mon user agent, le serveur pense donc que je suis 'monuseragent'. Vous pouvez le modifier à votre guise, vous pouvez par exemple vous faire passer pour un navigateur. L'envoie de données : import requests custom_headers = { 'User-Agent': 'monuseragent' } mes_datas = { 'champ1': 'valeur1', 'champ2': 'valeur2' } r = requests.post('url', headers=custom_headers, data=mes_datas) Dans ce code nous avons envoyer des données à 'url'. Pour aller plus loin : Pour finir je vais vous fournir un code d'exemple sur l'utilisation des sessions dont je vous ai parlé plus haut. Il est non fonctionnel, mais c'est plutôt facile de comprendre à quoi il était sensé servir. import bs4 as BeautifulSoup import requests session = requests.Session() r = session.get('https://www.starbucks.com/card', verify=False) headers1 = { 'Host': 'www.starbucks.com', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75', 'Origin': 'https://www.starbucks.com', "X-NewRelic-ID":"VQUHVlNSARACUFRWDgADVA==" } session.headers.update(headers1) soup = BeautifulSoup.BeautifulSoup(r.text, features="lxml") token=soup.find('input',{'name':'__RequestVerificationToken'}).get('value') data = { 'Card.Number': 'xxxx', 'Card.Pin': 'xxxx', '__RequestVerificationToken': token } r = session.post('https://www.starbucks.com/card/guestbalance', data=data, verify = False, allow_redirects=False) print(r.status_code) print(r.text) Voilà vous pouvez voir qu'ici j'utilise la session pour chopper les cookies qui sont définis lors de la visite du site. Pour l'utilisation de BeautifulSoup je rentrerais pas en détails dessus, c'est simplement un parser de code html que j'utilise pour récupérer le token csrf. Merci de m'avoir lu jusqu'ici, en espérant que cela vous a été utile
Posté(e) 26 janvier 20215 a Auteur il y a 23 minutes, wyuma a dit : bien joué super lourd un des meilleurs topic de 0 Merci !
Créer un compte ou se connecter pour commenter