Je cherche à lister les requêtes http (get, post ... ) qui sont envoyez par le serveurs, lorsque je lui envoi mes requêtes. Y'a t'il une fonction qui permet de le faire ?
Les requetes HTTP sont envoye par le client, pas par le serveur. L'outil que tu montres donne les requete HTTP du client.
Le 31 juillet 2021 à 16:45:29 :
Les requetes HTTP sont envoye par le client, pas par le serveur. L'outil que tu montres donne les requete HTTP du client.
A ouais d'accord et tu sais comment les récupérer en python ?
Je ne sais pas si il y a un paquet python qui fasse ca. Selenium a peut etre quelquechose pour faire ca si selenium conduit la session: https://selenium-python.readthedocs.io/index.html Mais en regardant rapidement je n'ai rien vu de directe.
Sinon, c'est peut etre possible d'ecrire une extension pour ton navigateur qui va dumper ce qu'il te faut dans un fichier ou un pipe et le lire a partir d'une application python.
Il y a l'outil Wireshark que tu peux lancer en ligne de commande pour qu'il enregistre ce qui se passe sur le réseau dans un fichier de log. Ensuite avec argparse en python il est possible de lire les fichier de log de ce type.
Sinon y a aussi socket, plus bas niveau, qui doit permettre de sniffer le réseau
Le 31 juillet 2021 à 19:12:37 :
Il y a l'outil Wireshark que tu peux lancer en ligne de commande pour qu'il enregistre ce qui se passe sur le réseau dans un fichier de log. Ensuite avec argparse en python il est possible de lire les fichier de log de ce type.
Sinon y a aussi socket, plus bas niveau, qui doit permettre de sniffer le réseau
Wireshark n'est pas utile ici. Tu perds beaucoup trop d'information dans wireshark. Les requetes sont en HTTPS. Donc tu n'auras pas le message clair.
Donc ca veut dire que la seule chose que tu va avoir est l'addresse IP de la machine avec laquelle tu cause. Ca ne te donnera pas l'url, ca ne te donnera pas les pametres, et ca ne te donnera pas les headers.
Dans ce cas faut que le code s'exécute dans le navigateur idéalement en javascript.
Après pour https ça dépend, si t'es propriétaire du serveur dont tu veux voir les connexions, tu peux toujours déchiffrer ce qui transite avec la clé privé, mais niveau sécurité c'est limite de stocker la clé privé comme ça sur un ordi autre que le serveur.
Le 31 juillet 2021 à 19:52:16 :
Après pour https ça dépend, si t'es propriétaire du serveur dont tu veux voir les connexions, tu peux toujours déchiffrer ce qui transite avec la clé privé, mais niveau sécurité c'est limite de stocker la clé privé comme ça sur un ordi autre que le serveur.
Non c'est pas pour mon serveur, En fait, je suis partie sur python parce que je pensais que c'était un truc assez basique à faire, donc pas mal pour apprendre apprendre le langage en bossant sur un projet concret, mais vue que je souhaite récupérer ses requêtes sur un espace client qui nécessite une authentification ça va être encore plus costaud.
J'avais prévu de faire ça avec zenoposter, qui récupère bien les requêtes et qui permet de s'authentifier sans problème, mais les fonctionnalités native de zenoposter ne permettent d'enregistrer et d'exploiter les requêtes HTTP, juste de les visualiser, j'ai fait des recherches et c'est possible de le faire mais ça nécessite de coder en C#, j'ai essayé tant bien que mal de mettre en place le bout de code partager sur Internet, mais j'ai pas réussi.
Je mets le bout de code au cas où quelqu'un s'y connaîtrait en C# : https://help.zennolab.com/en/v7/zennoposter/7.1.4/topic621.html
Je souhaite juste récupérer et stocker toutes les requêtes dans une variable après je pourrais les trier simplement avec le logiciel.
Le 31 juillet 2021 à 19:52:16 :
Après pour https ça dépend, si t'es propriétaire du serveur dont tu veux voir les connexions, tu peux toujours déchiffrer ce qui transite avec la clé privé, mais niveau sécurité c'est limite de stocker la clé privé comme ça sur un ordi autre que le serveur.
Tu as vu sa screenshot? C'est youtube qu'il cherche.
Le 31 juillet 2021 à 20:16:47 :
Le 31 juillet 2021 à 19:52:16 :
Après pour https ça dépend, si t'es propriétaire du serveur dont tu veux voir les connexions, tu peux toujours déchiffrer ce qui transite avec la clé privé, mais niveau sécurité c'est limite de stocker la clé privé comme ça sur un ordi autre que le serveur.Tu as vu sa screenshot? C'est youtube qu'il cherche.
Non c'est pas youtube, c'était juste pour l'exemple
Tu ne peux pas connaître les requêtes faites par le serveur (sauf hacking, ou serveur mal protégé, ou ce genre de choses). Mais tu peux connaître les requêtes faites par ton navigateur. En python tu peux faire ça facilement avec le package playwright
et l'objet request
.
Remplace firefox par chromium (chrome, chromium, edge) ou webkit (safari) si tu préfères. Tu peux aussi mettre headless
à True
pour ne pas affiche le navigateur.
from pprint import pprint
from typing import Dict, List
from playwright.sync_api import sync_playwright
def get_requests_from_url(url: str) -> List[Dict]:
with sync_playwright() as playwright:
browser = playwright.firefox.launch(headless=False)
page = browser.new_page()
requests = []
page.on("request", lambda request: requests.append({
"method": request.method,
"url": request.url,
"frame": request.frame, # frame est un objet que l'on peut explorer -> https://playwright.dev/python/docs/api/class-frame#frame-name
"headers": request.headers,
"timing": request.timing,
"post_data": request.post_data,
"resource_type": request.resource_type,
}))
page.goto(url)
browser.close()
return requests
if __name__ == "__main__":
URL = "https://www.jeuxvideo.com/forums/42-47-67289259-1-0-1-0-un-initie-de-python-pour-m-aiguiller.htm"
for request in get_requests_from_url(URL):
pprint(request)
print('-' * 150)
D'ailleurs j'ai mal nommé ma fonction, ça devrait plutôt être get_requests_to_url
nice,
ca m'etonait qu'un des wrapper autour des navigateurs ne sachent pas faire ca.
Le 31 juillet 2021 à 23:06:55 :
Tu ne peux pas connaître les requêtes faites par le serveur (sauf hacking, ou serveur mal protégé, ou ce genre de choses). Mais tu peux connaître les requêtes faites par ton navigateur. En python tu peux faire ça facilement avec le packageplaywright
et l'objetrequest
.Remplace firefox par chromium (chrome, chromium, edge) ou webkit (safari) si tu préfères. Tu peux aussi mettre
headless
àTrue
pour ne pas affiche le navigateur.from pprint import pprint from typing import Dict, List from playwright.sync_api import sync_playwright def get_requests_from_url(url: str) -> List[Dict]: with sync_playwright() as playwright: browser = playwright.firefox.launch(headless=False) page = browser.new_page() requests = [] page.on("request", lambda request: requests.append({ "method": request.method, "url": request.url, "frame": request.frame, # frame est un objet que l'on peut explorer -> https://playwright.dev/python/docs/api/class-frame#frame-name "headers": request.headers, "timing": request.timing, "post_data": request.post_data, "resource_type": request.resource_type, })) page.goto(url) browser.close() return requests if __name__ == "__main__": URL = "https://www.jeuxvideo.com/forums/42-47-67289259-1-0-1-0-un-initie-de-python-pour-m-aiguiller.htm" for request in get_requests_from_url(URL): pprint(request) print('-' * 150)
Super, je vais essayer ça merci !
Burp Suite
Apparemment on peut faire ça aussi avec selenium-wire : https://pypi.org/project/selenium-wire/