2011-10-17 16 views
21

Tengo un módulo Java que recibe la cadena User-Agent del navegador del usuario final necesita comportarse de manera ligeramente diferente dependiendo del tipo de navegador, la versión del navegador y tal vez incluso el sistema operativo. Ej: {"FireFox", "7.0", "Win7"}, {"Safari", "3.2", "iOS9"}¿Existe un buen método para analizar la cadena de agente de usuario?

que entiende que la cadena User-Agent puede variar en su formato para la misma configuración exacta debido a las diferentes instalaciones enchufables etc.

Mis preguntas:

  1. es la estructura del User-Agent bien definida? En caso afirmativo, ¿dónde puedo encontrarlo exactamente? (Según mi comprensión del RFC, aquí no hay mucha estandarización).
  2. Suponiendo que la pregunta para el n. ° 1 es No, ¿hay una forma adecuada de analizarla para obtener la información que necesito?
  3. ¿Existe una mejor manera de obtener la información que necesito que no sea la cadena User-Agent?

Nota importante: estoy hablando de una aplicación web, por lo que mis capacidades de recopilación de datos están limitadas a javascript.

+0

* "necesita comportarse de forma ligeramente diferente" * A diferencia de cómo, específicamente **? ** Hay muchas técnicas para suministrar el contenido/forma correcta de contenido a en base a los usuarios finales necesitar. Muy pocos de ellos confían en analizar la cadena de AU inherentemente no confiable. –

+0

_ "mis capacidades de recopilación de datos están limitadas a javascript" _ ¿Java o Javascript? –

+0

@Andrew Thompson: ¿puedes dar más información sobre a qué tipo de técnicas de recopilación de información te refieres? Estoy limitado a un método no interactivo. – RonK

Respuesta

16

Para Java, eche un vistazo a User-Agent-Utils. Es bastante compacto (< 50kB) y no tiene dependencias.

Nota aunque la última versión es bastante reciente (1.21, publicado 24/01/2018), páginas estados de la biblioteca:

Advertencia: Este proyecto está al final de su vida y no se actualiza regularmente por más tiempo

Y en el github page que dice:

EOL ADVERTENCIA

Esta biblioteca ha llegado al final de su vida útil y ya no verá las actualizaciones regulares .

versión 1.21 fue la última versión oficial en 2018.

+1

Estas páginas ahora dicen "EOL WARNING Esta biblioteca ha llegado al final de su vida! La versión 1.20 es la última versión oficial. " –

+0

@NielsBasjes - Eso es interesante. Algunas de las otras respuestas aquí tienen sugerencias para otras bibliotecas. La [publicación de blog] de Harald Walker (http://www.bitwalker.eu/blog/user-agent-utils-1-20-final-release) sobre por qué detuvo el desarrollo de User Agent Util definitivamente vale la pena leerla. –

+2

@TedHopp: Sí, las mentiras en los agentes de consumo son un problema importante. Ver también mi blog sobre el tema https://techlab.bol.com/making-sense-user-agent-string/ que trata sobre https://github.com/nielsbasjes/yauaa y la arquitectura de ese analizador. –

11
  1. es la estructura de la User-Agent bien definidos? En caso afirmativo, ¿dónde puedo encontrarlo exactamente? (Según mi comprensión del RFC no hay mucha estandarización de aquí).

No, la estructura de una cadena de agente de usuario no ha sido estandarizada pero es muy similar entre los diferentes agentes. Aunque son muy similares, sigue siendo necesario utilizar múltiples patrones para la detección.

  1. Suponiendo que la pregunta para # 1 es No - ¿existe una forma correcta de analizarlo para obtener la información que necesito?

Puede buscar en la biblioteca UADetector. Es un contenedor para la base de datos de usuario-agente de user-agent-string.info.

  1. ¿Hay una mejor manera de obtener la información que necesito aparte de la cadena de agente de usuario?

yo no diría que es una manera mejor o peor, sino otra manera de detectar los agentes de usuario es el uso del cliente de JavaScript para recopilar información sobre el User-Agent y enviándolo a través de entradas HTML ocultos o XmlHttpRequest a tu back-end. Todo depende de lo que quieras identificar. Para una detección precisa de webcrawlers JavaScript no podrá ayudar.

3

La biblioteca user-agent-utils ha llegado al final de su vida útil.

Existe una lib multilenguaje prometedora llamada ua-parser que se mantiene activamente.

+0

Parece que ua-parser tampoco se mantiene activamente: https: // github.com/ua-parser/uap-java/issues/1 – elhefe

7

Tener un vistazo a la biblioteca de Java que escribí para este propósito: Yauaa

Hice un servlet muy simple donde se puede probarlo para ver si se da las respuestas que está buscando: http://analyze-useragent.appspot.com/

Apache 2 con licencia y publicado en Maven, por lo que su uso en una aplicación Java es realmente fácil. Actualmente se utiliza en producción en uno de los sitios web más activos de los Países Bajos (donde trabajo).

ver este blog sobre este https://techlab.bol.com/making-sense-user-agent-string/

+0

Gracias, aunque esta es una pregunta bastante antigua (desde 2011) - Es posible que todavía la necesite - la LRU incorporada es una buena adición a mis necesidades actuales , ¿tiene un tamaño configurable? – RonK

+0

Sí, puede establecer el tamaño e incluso deshabilitarlo. –

Cuestiones relacionadas