Làm cách nào để tải tác nhân người dùng với Flask?


107

Tôi đang cố gắng truy cập tác nhân người dùng bằng Flask, nhưng tôi không thể tìm thấy tài liệu về nó hoặc nó không cho tôi biết.

Câu trả lời:


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

Bạn cũng có thể sử dụng request.user_agentđối tượng chứa các thuộc tính sau được tạo dựa trên chuỗi useragent:

  • nền tảng (windows, linux, macos, v.v.)
  • trình duyệt (chrome, firefox, msie, v.v.)
  • phiên bản
  • ngôn ngữ
  • string ( == request.headers.get('User-Agent'))


20

Nếu bạn dùng

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

bạn có thể nhận được: Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, như Gecko) Chrome / 45.0.2454.101 Safari / 537.36

Nếu bạn dùng

request.user_agent

bạn có thể nhận được như thế này:

  • user_agent.platform: windows
  • user_agent.browser: chrome
  • user_agent.version: 45.0.2454.101
  • user_agent.language: Không có
  • user_agent.string: Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, như Gecko) Chrome / 45.0.2454.101 Safari / 537.36

Tại sao ngôn ngữ là Không? Có cách nào đơn giản để lấy ngôn ngữ không?
Faminator

@Faminator nếu trình duyệt của máy khách không đặt trường ngôn ngữ thì máy chủ sẽ không có cách nào lấy được, vì vậy nó chỉ hiển thị Không có.
ffledgling

1

UA thường không chứa ngôn ngữ. Nếu bạn muốn đặt ngôn ngữ trong trình duyệt, bạn có thể sử dụng

request.accept_languages

Nó sẽ cung cấp cho bạn danh sách các ngôn ngữ. Ví dụ

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

Để truy cập giá trị đầu tiên, bạn có thể sử dụng

request.accept_languages[0][0]

điều này sẽ dẫn đến chuỗi

'en-US'

Thông tin chi tiết về tiêu đề 'accept_language': https://www.w3.org/International/questions/qa-lang-priorities


0

Câu hỏi đòi hỏi nhiều thông tin hơn. Thư viện này dường như phù hợp với dự luật thu thập nhiều thông tin từ bình và có các lệnh gọi ví dụ để lấy thông tin này ra khỏi ngữ cảnh ứng dụng.

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

Việc sử dụng được lưu trữ ở định dạng này:

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

Đây là một trong những nơi trong thư viện nơi dữ liệu được thu thập:

https://github.com/ashcrow/flask-track-usage/blob/master/src/flask_track_usage/ init .py quanh dòng 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
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.