2011-10-17 18 views
21

Ho un modulo Java che riceve la stringa User-Agent dal browser di un utente finale che deve comportarsi in modo leggermente diverso a seconda del tipo di browser, della versione del browser e forse anche del sistema operativo. esempio: {"FireFox", "7.0", "Win7"}, {"Safari", "3.2", "iOS9"}Esiste un buon metodo per analizzare la stringa user-agent?

ho capito che la stringa User-Agent può variare nel formato per la stessa configurazione a causa di diverse installazioni plug-in, ecc

Le mie domande:

  1. è il struttura del User-Agent ben definita? Se sì, dove posso trovarlo esattamente? (Dalla mia comprensione della RFC non c'è molta standardizzazione qui).
  2. Supponendo che la domanda per # 1 sia No - esiste un modo corretto di analizzarlo per ottenere le informazioni di cui ho bisogno?
  3. C'è un modo migliore per ottenere le informazioni che mi servono oltre alla stringa User-Agent?

Nota importante: sto parlando di un'app Web, quindi le mie capacità di raccolta dati sono limitate a javascript.

+0

* "ha bisogno di comportarsi in modo leggermente diverso" * A differenza di come, in particolare **? ** Ci sono molte tecniche per fornire il giusto contenuto/forma di contenuto a base di utenti finali bisogno. Pochissimi di loro si basano sull'analisi della stringa UA intrinsecamente inaffidabile. –

+0

_ "le mie capacità di raccolta dati sono limitate a javascript" _ Java o Javascript? –

+0

@Andrew Thompson - puoi approfondire un po 'di più su quale forma di raccolta delle informazioni ti stai riferendo? Sono limitato a un metodo non interattivo. – RonK

risposta

16

Per Java, dare un'occhiata a User-Agent-Utils. È abbastanza compatto (< 50kB) e non ha dipendenze.

Nota anche se l'ultima release è abbastanza recente (1.21, rilasciato 2018/01/24), della biblioteca pagina afferma:

Attenzione: Questo progetto è la fine del ciclo di vita e non verrà aggiornato regolarmente più

E sul github page dice:

EOL ATTENZIONE

Questa libreria ha raggiunto la fine del ciclo di vita e non vedrà più gli aggiornamenti regolari .

Versione 1.21 è stato l'ultimo rilascio ufficiale nel 2018.

+1

Queste pagine ora dicono "EOL WARNING Questa libreria ha raggiunto la fine della vita! La versione 1.20 è l'ultima versione ufficiale " –

+0

@NielsBasjes - È interessante. Alcune delle altre risposte qui hanno indicazioni su altre librerie. Harald Walker [post di blog] (http://www.bitwalker.eu/blog/user-agent-utils-1-20-final-release) sul motivo per cui ha smesso di sviluppare ulteriormente l'User Agent Util merita sicuramente una lettura. –

+2

@TedHopp: Sì, le bugie negli useragent sono un grosso problema. Vedi anche il mio blog sull'argomento https://techlab.bol.com/making-sense-user-agent-string/ che tratta https://github.com/nielsbasjes/yauaa e l'architettura di quell'analizzatore. –

11
  1. è la struttura del User-Agent ben definito? Se sì, dove posso trovarlo esattamente? (Dalla mia comprensione della RFC non c'è molto standardizzazione qui).

No, la struttura di una stringa User-Agent non è standardizzato, ma è molto simile tra i diversi agenti. Sebbene siano molto simili, è comunque necessario utilizzare più modelli per il rilevamento.

  1. Supponendo che la domanda per # 1 c'è - c'è un modo corretto di analizzarlo per avere le informazioni che ho bisogno?

È possibile provare la libreria UADetector. È un wrapper per l'User-Agent-Database di user-agent-string.info.

  1. C'è un modo migliore per ottenere le informazioni di cui ho bisogno oltre alla stringa User-Agent?

Non direi che sia un modo migliore o peggiore, ma un altro modo per rilevare agenti utente è l'uso sul lato client di JavaScript per raccogliere informazioni circa l'User-Agent e inviandolo tramite ingressi HTML nascosti o XmlHttpRequest al tuo back-end. Tutto dipende da ciò che vuoi identificare. Per il rilevamento accurato dei webcrawlers, JavaScript non sarà in grado di aiutarti.

3

La libreria user-agent-utils ha raggiunto la fine del ciclo di vita.

C'è un lib multilanguage promettente chiamato ua-parser che viene mantenuto attivamente.

+0

Non sembra che ua-parser sia mantenuto attivamente più: https: // github.com/ua-parser/uap-java/issues/1 – elhefe

7

Date un'occhiata alla libreria Java che ho scritto per questo scopo: Yauaa

Ho fatto un semplice servlet, dove si può provare a vedere se dà le risposte che state cercando: http://analyze-useragent.appspot.com/

È concesso in licenza Apache 2 e pubblicato su Maven, quindi utilizzarlo in un'applicazione Java è davvero facile. Attualmente è utilizzato in produzione su uno dei siti Web più frequentati dei Paesi Bassi (dove lavoro).

Vedi questo blog su questo https://techlab.bol.com/making-sense-user-agent-string/

+0

Grazie, anche se questa è una domanda abbastanza vecchia (dal 2011) - Potrei averne ancora bisogno - l'LRU integrata è una buona aggiunta alle mie attuali esigenze , ha una dimensione configurabile? – RonK

+0

Sì, è possibile impostare la dimensione e persino disabilitarla. –

Problemi correlati