2011-10-17 40 views
21

Tôi có mô-đun Java nhận chuỗi User-Agent từ trình duyệt của người dùng cuối cần hoạt động hơi khác nhau tùy thuộc vào loại trình duyệt, phiên bản trình duyệt và thậm chí có thể là hệ điều hành. Ví dụ: {"FireFox", "7.0", "Win7"}, {"Safari", "3.2", "iOS9"}Có phương pháp nào tốt để phân tích cú pháp chuỗi tác nhân người dùng không?

tôi hiểu rằng chuỗi User-Agent có thể khác nhau về định dạng của nó cho cùng một cấu hình chính xác do plug-in cài đặt khác nhau vv

Câu hỏi của tôi:

  1. Là cấu trúc của User-Agent cũng được xác định? Nếu có - tôi có thể tìm chính xác ở đâu? (Từ sự hiểu biết của tôi về RFC không có nhiều tiêu chuẩn hóa ở đây).
  2. Giả sử câu hỏi cho # 1 là No - có cách nào thích hợp để phân tích cú pháp để nhận thông tin tôi cần không?
  3. Có cách nào tốt hơn để nhận thông tin tôi cần ngoài chuỗi User-Agent không?

Lưu ý quan trọng - Tôi đang nói về một ứng dụng web, vì vậy khả năng thu thập dữ liệu của tôi bị giới hạn ở javascript.

+0

* "cần phải cư xử hơi khác nhau" * thức khác nhau như thế nào, đặc biệt **? ** Có rất nhiều kỹ thuật để cung cấp nội dung/form bên phải của nội dung dựa trên người dùng cuối cùng nhu cầu. Rất ít người trong số họ dựa vào phân tích chuỗi UA vốn không đáng tin cậy. –

+0

_ "khả năng thu thập dữ liệu của tôi bị giới hạn ở javascript" _ Java hoặc Javascript? –

+0

@Andrew Thompson - bạn có thể xây dựng thêm một chút về hình thức thu thập thông tin kỹ thuật mà bạn đang đề cập đến không? Tôi bị giới hạn ở một phương pháp không tương tác. – RonK

Trả lời

16

Đối với Java, hãy xem User-Agent-Utils. Nó khá nhỏ gọn (< 50kB) và không có phụ thuộc.

Lưu ý mặc dù phiên bản mới nhất là khá gần đây (1,21, phát hành 2018/01/24) của thư viện quốc gia page:

Cảnh báo: Đây là dự án cuối cùng của cuộc sống và sẽ không được cập nhật thường xuyên nữa

Và trên github page nó nói:

EOL CẢNH BÁO

Thư viện này đã hết hạn và sẽ không thấy các cập nhật thường xuyên nữa.

Version 1,21 đã phát hành chính thức cuối cùng trong 2018.

+1

Những trang này bây giờ nói "EOL WARNING Thư viện này đã hết hạn! Phiên bản 1.20 là bản phát hành chính thức cuối cùng. " –

+0

@NielsBasjes - Thật thú vị. Một số câu trả lời khác ở đây có con trỏ đến các thư viện khác. Harald Walker [bài đăng trên blog] (http://www.bitwalker.eu/blog/user-agent-utils-1-20-final-release) về lý do tại sao anh ấy ngừng phát triển thêm User Agent Util chắc chắn đáng để đọc. –

+2

@TedHopp: Có những lời nói dối trong useragents là một vấn đề lớn. Xem thêm blog của tôi về chủ đề https://techlab.bol.com/making-sense-user-agent-string/ đó là về https://github.com/nielsbasjes/yauaa và kiến ​​trúc của máy phân tích đó. –

11
  1. là cấu trúc của User-Agent được xác định rõ? Nếu có - tôi có thể tìm chính xác ở đâu? (Từ sự hiểu biết của tôi về RFC không có nhiều tiêu chuẩn ở đây).

Không, cấu trúc của chuỗi Tác nhân người dùng không được chuẩn hóa nhưng rất giống nhau giữa các tác nhân khác nhau. Mặc dù chúng rất giống nhau nhưng vẫn cần phải sử dụng nhiều mẫu để phát hiện.

  1. Giả sử các câu hỏi cho # 1 là Không - là có một cách thích hợp để phân tích nó để có được các thông tin cần thiết?

Bạn có thể thử thư viện UADetector. Nó là một trình bao bọc cho User-Agent-Database của user-agent-string.info.

  1. Có cách nào tốt hơn để nhận thông tin tôi cần ngoài chuỗi User-Agent không?

tôi sẽ không nói đó là một cách tốt hơn hoặc tồi tệ hơn, nhưng một cách khác để phát hiện đại lý người dùng là việc sử dụng client-side JavaScript để thu thập thông tin về User-Agent và gửi nó qua đầu vào HTML ẩn hoặc XmlHttpRequest vào chương trình phụ trợ của bạn. Tất cả phụ thuộc vào những gì bạn muốn xác định. Để phát hiện chính xác JavaScript của webcrawlers, bạn sẽ không thể trợ giúp.

3

Thư viện user-agent-utils đã hết hạn.

Có lib đa ngôn ngữ đầy hứa hẹn được gọi là ua-parser được duy trì tích cực.

+0

Không giống như ua-parser đang được duy trì tích cực nữa: https: // github.com/ua-parser/uap-java/issues/1 – elhefe

7

Có một cái nhìn tại các thư viện Java tôi đã viết cho mục đích này: Yauaa

tôi đã thực hiện một servlet rất đơn giản mà bạn có thể dùng thử để xem nếu nó mang lại câu trả lời bạn đang tìm kiếm: http://analyze-useragent.appspot.com/

Đó là Apache 2 được cấp phép và xuất bản vào Maven để sử dụng nó trong một ứng dụng Java thực sự dễ dàng. Nó hiện đang được sử dụng trong sản xuất trên một trong những trang web bận rộn nhất của Hà Lan (nơi tôi làm việc).

Xem blog này về vấn đề này https://techlab.bol.com/making-sense-user-agent-string/

+0

Cảm ơn, trong khi đây là một câu hỏi khá cũ (từ năm 2011) - Tôi có thể cần đến nó - LRU tích hợp là một bổ sung tốt cho nhu cầu hiện tại của tôi , nó có kích thước cấu hình không? – RonK

+0

Có, bạn có thể đặt kích thước và thậm chí tắt nó. –

Các vấn đề liên quan