Wie bekomme ich den Benutzeragenten mit Flask?

107

Ich versuche, mit Flask auf den Benutzeragenten zuzugreifen, aber ich kann die Dokumentation entweder nicht finden oder sie sagt es mir nicht.

Repalviglator
quelle

Antworten:

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

Sie können auch das request.user_agentObjekt verwenden, das die folgenden Attribute enthält, die basierend auf der Zeichenfolge useragent erstellt werden:

  • Plattform (Windows, Linux, Macos usw.)
  • Browser (Chrome, Firefox, MSIE usw.)
  • Ausführung
  • Sprache
  • string ( == request.headers.get('User-Agent'))
DiebMaster
quelle
28
flask.request.user_agent.string
Francisco Aquino
quelle
19

Wenn du benutzt

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

Möglicherweise erhalten Sie: Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, wie Gecko) Chrome / 45.0.2454.101 Safari / 537.36

Wenn du benutzt

request.user_agent

Sie können so bekommen:

  • user_agent.platform: windows
  • user_agent.browser: chrome
  • user_agent.version: 45.0.2454.101
  • user_agent.language: Keine
  • user_agent.string: Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, wie Gecko) Chrome / 45.0.2454.101 Safari / 537.36
Wyx
quelle
Warum ist die Sprache Keine? Gibt es einen einfachen Weg, um die Sprache zu bekommen?
Faminator
@Faminator Wenn der Browser des Clients das Sprachfeld nicht festlegt, kann der Server es nicht abrufen, sodass einfach Keine angezeigt wird.
Jungvogel
1

UA enthält normalerweise keine Sprache. Wenn Sie die Sprache im Browser einstellen möchten, können Sie verwenden

request.accept_languages

Es gibt Ihnen eine Liste der Sprachen. Z.B

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

Um auf den ersten Wert zuzugreifen, können Sie verwenden

request.accept_languages[0][0]

was zu einer Zeichenfolge führt

'en-US'

Detaillierte Informationen zum Header "accept_language": https://www.w3.org/International/questions/qa-lang-priorities

jud
quelle
0

Die Frage bittet um viel mehr Informationen. Diese Bibliothek scheint in die Rechnung des Sammelns vieler Informationen aus dem Kolben zu passen und enthält Beispielaufrufe, um diese Informationen aus dem Anwendungskontext zu entfernen.

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

Die Verwendung wird in diesem Format gespeichert:

[
    {
            '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,
    },
    {
        ....
    }
]

Hier ist einer der Orte in der Bibliothek, an denen die Daten gesammelt werden:

https://github.com/ashcrow/flask-track-usage/blob/master/src/flask_track_usage/ init .py um Zeile 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
    }
Phyatt
quelle