Saya melihat ini di aplikasi flask tetapi yang menggunakan werkzeug untuk mengurai info agen pengguna dan melihat perilaku yang sama di kedua objek permintaan flask dan parser werkzeug useragent mandiri.
Sepertinya kehadiran substring "mac" di "makro" (model perangkat) membuatnya gagal. Namun, saya merasa itu harus diganti dengan "Linux" dan / atau "Android 9" yang jelas.
>>> from werkzeug.useragents import UserAgent
>>> UserAgent("Mozilla/5.0 (Linux; Android 9; motorola one macro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.111 Mobile Safari/537.36").platform
'macos'
Saya mengharapkan platform
untuk string agen pengguna ini menjadi "android".
Lingkungan: Linux
Masalahnya adalah UserAgentParser
menemukan platform dengan mencari kata kunci secara naif.
Berikut cuplikan kode yang relevan:
platforms: Any = (
(" cros ", "chromeos"),
("iphone|ios", "iphone"),
("ipad", "ipad"),
(r"darwin|mac|os\s*x", "macos"),
("win", "windows"),
(r"android", "android"),
...
Dalam kasus Anda, "darwin|mac|os\s*x"
menemukan kecocokan sebelum "android"
dicari. Dari apa yang saya lihat tentang header agen pengguna, mereka dapat sangat bervariasi. Mungkin seseorang yang memiliki lebih banyak pengalaman dapat menyarankan pola ekspresi reguler yang lebih baik. Saya khawatir pencarian kata kunci sederhana kami tidak memadai dan mungkin ada lebih banyak bug yang tidak diketahui seperti milik Anda.
Daripada melakukan ini sendiri, mungkin Anda bisa mempertimbangkan untuk menambahkan ketergantungan pada pustaka ua-parser . Saya melakukan peninjauan terhadap proyek tersebut dan didasarkan pada inti lintas bahasa yang cukup populer yang memiliki set pengujian yang sangat besar. Versi python mendukung beragam versi python dan kodenya sendiri harus cukup stabil.
Saya akan menawarkan PR kecuali jika Anda ingin menerobosnya. Sepertinya solusi yang bagus.
Saya ingin mengambil celah itu. Terima kasih!
Rad! Terima kasih!
Saya senang untuk mempertimbangkan PR yang menyesuaikan aturan pencocokan untuk memperbaiki bagaimana agen ini dicocokkan, tetapi kami tidak akan menambahkan ketergantungan untuk ini.
Paket ua-parser
menemukan agen pengguna yang sesuai dengan menggunakan pola regex (mirip dengan pendekatan kami, tetapi jelas lebih menyeluruh). Pola regex mereka mengambil ~ 5500 baris kode .
Saya pikir sudah jelas bahwa kami tidak dapat menawarkan UserAgentParser
tanpa menambahkan ua-parser
sebagai ketergantungan atau menyertakan bagian dari kode mereka ke dalam Werkzeug.
Alternatifnya, kami dapat menambahkan pesan di readme dan / atau dokumen untuk menjelaskan bahwa UserAgentParser
adalah dasar dan tidak akan berfungsi di banyak skenario.
Saya telah membuka # 1989 untuk mengatasi string platform ini tetapi masih jauh dari perbaikan lengkap untuk sisa percakapan di sini.
Komentar yang paling membantu
Daripada melakukan ini sendiri, mungkin Anda bisa mempertimbangkan untuk menambahkan ketergantungan pada pustaka ua-parser . Saya melakukan peninjauan terhadap proyek tersebut dan didasarkan pada inti lintas bahasa yang cukup populer yang memiliki set pengujian yang sangat besar. Versi python mendukung beragam versi python dan kodenya sendiri harus cukup stabil.