web-dev-qa-db-fra.com

Comment obtenir l'agent utilisateur avec Flask?

J'essaie d'obtenir un accès à l'agent utilisateur avec Flask, mais je ne trouve pas la documentation ou elle ne me le dit pas.

92
repalviglator
from flask import request
request.headers.get('User-Agent')

Vous pouvez également utiliser l'objet request.user_agent qui contient les attributs suivants, créés en fonction de la chaîne useragent:

  • plate-forme (windows, linux, macos, etc.)
  • navigateur (chrome, firefox, msie, etc.)
  • version
  • la langue
  • string (== request.headers.get('User-Agent'))
155
ThiefMaster
flask.request.user_agent.string
21
Francisco Aquino

Si tu utilises

request.headers.get('User-Agent')

vous pouvez obtenir: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/45.0.2454.101 Safari/537.36

Si tu utilises

request.user_agent

vous pouvez obtenir comme ça:

  • user_agent.platform: windows
  • user_agent.browser: chrome
  • user_agent.version: 45.0.2454.101
  • user_agent.language: Aucun
  • user_agent.string: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/45.0.2454.101 Safari/537.36
16
wyx

UA ne contient généralement pas de langue. Si vous souhaitez obtenir la langue définie dans le navigateur, vous pouvez utiliser 

request.accept_languages

Cela vous donnera une liste de langues. Par exemple. 

LanguageAccept([('en-US', 1), ('en', 0.5)])

Pour accéder à la première valeur, vous pouvez utiliser

request.accept_languages[0][0]

ce qui entraînera une chaîne

'en-US'

Informations détaillées sur l'en-tête 'accept_language ": https://www.w3.org/International/questions/qa-lang-priorities

1
jud

La question demande beaucoup plus d'informations. Cette bibliothèque semble faire l’objet de la collecte d’une grande quantité d’informations en flacon et propose des exemples d’appel pour extraire ces informations du contexte de l’application.

https://pythonhosted.org/Flask-Track-Usage/

L'utilisation est stockée dans ce format:

[
    {
            'url': str,
            'user_agent': {
                'browser': str,
                'language': str,
                'platform': str,
                'version': str,
            },
            'blueprint': str,
            'view_args': dict or None
            'status': int,
            'remote_addr': str,
            'xforwardedfor': str,
            'authorization': bool
            'ip_info': str or None,
            'path': str,
            'speed': float,
            'date': datetime,
    },
    {
        ....
    }
]

Voici l'un des endroits de la bibliothèque où les données sont collectées:

https://github.com/ashcrow/flask-track-usage/blob/master/src/flask_track_usage/init .py autour de la ligne 158

    data = {
        'url': ctx.request.url,
        'user_agent': ctx.request.user_agent,
        'server_name': ctx.app.name,
        'blueprint': ctx.request.blueprint,
        'view_args': ctx.request.view_args,
        'status': response.status_code,
        'remote_addr': ctx.request.remote_addr,
        'xforwardedfor': ctx.request.headers.get(
            'X-Forwarded-For', None),
        'authorization': bool(ctx.request.authorization),
        'ip_info': None,
        'path': ctx.request.path,
        'speed': float(speed),
        'date': int(time.mktime(current_time.timetuple())),
        'content_length': response.content_length,
        'request': "{} {} {}".format(
            ctx.request.method,
            ctx.request.url,
            ctx.request.environ.get('SERVER_PROTOCOL')
        ),
        'url_args': dict(
            [(k, ctx.request.args[k]) for k in ctx.request.args]
        ),
        'username': None,
        'track_var': g.track_var
    }
0
phyatt