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.

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'))


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

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


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
    }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.