Je veux détecter si la requête provient de l' localhost:5000
o foo.herokuapp.com
et quel chemin a été demandé. Comment puis-je obtenir ces informations sur une requête Flask ?
Réponses
Trop de publicités?Vous pouvez examiner l'url à travers plusieurs Request
champs :
Imaginez que votre application écoute sur l'application Root suivante :
http://www.example.com/myapplication
Et un utilisateur demande l'URI suivant :
http://www.example.com/myapplication/foo/page.html?x=y
Dans ce cas, les valeurs des attributs mentionnés ci-dessus seraient les suivantes :
path /foo/page.html full_path /foo/page.html?x=y script_root /myapplication base_url http://www.example.com/myapplication/foo/page.html url http://www.example.com/myapplication/foo/page.html?x=y url_root http://www.example.com/myapplication/
Vous pouvez facilement extraire la partie hôte avec les fractionnements appropriés.
Un autre exemple :
demande :
curl -XGET http://127.0.0.1:5000/alert/dingding/test?x=y
alors :
request.method: GET
request.url: http://127.0.0.1:5000/alert/dingding/test?x=y
request.base_url: http://127.0.0.1:5000/alert/dingding/test
request.url_charset: utf-8
request.url_root: http://127.0.0.1:5000/
str(request.url_rule): /alert/dingding/test
request.host_url: http://127.0.0.1:5000/
request.host: 127.0.0.1:5000
request.script_root:
request.path: /alert/dingding/test
request.full_path: /alert/dingding/test?x=y
request.args: ImmutableMultiDict([('x', 'y')])
request.args.get('x'): y
Si vous utilisez Python, je vous suggère d'explorer l'objet de requête :
dir(request)
Puisque l'objet supporte la méthode dict :
request.__dict__
Il peut être imprimé ou sauvegardé. Je l'utilise pour enregistrer les codes 404 dans Flask :
@app.errorhandler(404)
def not_found(e):
with open("./404.csv", "a") as f:
f.write(f'{datetime.datetime.now()},{request.__dict__}\n')
return send_file('static/images/Darknet-404-Page-Concept.png', mimetype='image/png')