web-dev-qa-db-ja.com

ユーザーエージェント文字列を解析する良い方法はありますか?

エンドユーザーのブラウザーからUser-Agent文字列を受け取るJavaモジュールがあり、ブラウザーの種類、ブラウザーのバージョン、および場合によってはオペレーティングシステムによっても動作が少し異なる必要があります。例:{"FireFox", "7.0", "Win7"}{"Safari", "3.2", "iOS9"}

User-Agent文字列は、プラグインのインストールが異なるため、まったく同じ構成でも形式が異なる場合があることを理解しました。

私の質問:

  1. User-Agentの構造は明確に定義されていますか?はいの場合-どこで正確に見つけることができますか? (RFCについての私の理解から、ここではあまり標準化されていません)。
  2. #1の質問がNoであるとすると、それを解析して必要な情報を取得する適切な方法はありますか?
  3. User-Agent文字列以外に、必要な情報を取得するより良い方法はありますか?

重要な注意-私はウェブアプリについて話しているので、私のデータ収集機能はjavascriptに制限されています。

28
RonK

Javaの場合は、 ser-Agent-Utils を参照してください。それはかなりコンパクト(<50kB)であり、依存関係はありません。

最新のリリースはかなり最近のものですが(1.21、2018年1月24日リリース)、ライブラリのページには次のように記載されています。

警告:このプロジェクトは廃止されており、今後定期的に更新されません

そして github page には次のように書かれています:

EOL WARNING

このライブラリはサポートが終了しており、定期的な更新は表示されなくなります。

バージョン1.21は2018年の最後の公式リリースです。

17
Ted Hopp

Java私がこの目的のために書いたライブラリ: Yauaa を見てください。

非常にシンプルなサーブレットを作成し、それを試して、探している答えが得られるかどうかを確認できます。 https://try.yauaa.basjes.nl/

これは、Apache 2のライセンスを取得してMavenに公開しているため、Javaアプリケーションでの使用は非常に簡単です。現在、オランダで最も忙しいWebサイトの1つ(私が作業している場所)での運用に使用されています。

これについてはこのブログを参照してください https://techlab.bol.com/making-sense-user-agent-string/

17
Niels Basjes
  1. User-Agentの構造は明確に定義されていますか?はいの場合-どこで正確に見つけることができますか? (RFCについての私の理解から、ここではあまり標準化されていません)。

いいえ、User-Agent文字列の構造は標準化されていませんが、異なるエージェント間でよく似ています。それらは非常に似ていますが、検出には複数のパターンを使用する必要があります。

  1. #1の質問が「いいえ」であるとすると、必要な情報を取得するためにそれを解析する適切な方法はありますか?

ライブラリ ADetector を試すことができます。 ser-agent-string.info のUser-Agent-Databaseのラッパーです。

  1. User-Agent文字列以外に、必要な情報を取得するより良い方法はありますか?

良い方法でも悪い方法でもありませんが、ユーザーエージェントを検出する別の方法は、クライアント側でJavaScriptを使用してユーザーエージェントに関する情報を収集し、非表示のHTML入力またはXmlHttpRequestを介してバックエンドに送信することです。それはすべて、あなたが識別したいものに依存します。ウェブクローラーを正確に検出するために、JavaScriptは役に立ちません。

12
before

ser-agent-utils ライブラリがサポート終了になりました。

a-parser と呼ばれる有望な多言語libがあり、積極的にメンテナンスされています。

3
tworec

Githubでまともな評判の最新のライブラリの場合、次のライブラリを使用できます。

https://github.com/blueconic/browscap-Java

Browscap に基づいているため、将来的に新しいブラウザに簡単にアップグレードできます。

0
Fritz Duchardt