sql >> Database teknologi >  >> RDS >> Mysql

Brugeragent-header - forkortelse for mysql-lagring

Der er ingen regler for User-Agent-strenge, så der er ingen måde at lave en fuldstændig korrekt og fremtidssikret parser på. Der er dog et generelt mønster:

User-Agent: <engine-string> <engine-string> ...

Hvor engine-string har form:

<agent-name> (<comment>; <comment>; ...)

Hver motorstreng (jeg kaldte det lige sådan, efter min forståelse, at det måske ikke er korrekt) kan have kommentarer eller ikke.

For eksempel:

Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) ↲
AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e ↲
Safari/8536.25 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

(Dette er en enkelt streng, jeg har lige brudt den op i linjer.) Det ser ud til, at når nogen laver en forgrening af en browsermotor, tilføjer de bare deres ting til slutningen. Så vi har en abstrakt "Mozilla"-browser (en arv fra "First Browser War"), som tror, ​​den er på iPhone. Så ser vi, at der er et WebKit (som husker, at det blev født som KHTML for lang tid siden). Så er der en version/6.0-modifikation, som derefter blev ændret til Mobile/10A5376e, som blev Safari/8536.25, som endelig afslører hemmeligheden om, at det faktisk er en mobil Google-bot.

Et andet eksempel:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.4; ↲
InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; ↲
.NET CLR 3.5.30729; .NET CLR 1.1.4322)

Dette er en enkelt motor, men den har meget at sige i parentes.

Så den generelle observation er:

  • sidste motorstrenge er vigtigst,
  • sidste kommentarer i parenteser er mindre vigtige.

Med det i tankerne, ville min idé være at parse strengen ind i disse motor- og kommentar-tokens, og derefter fra hver motorsektion smide kommentarer væk fra f.eks. den femte. Så, hvis det stadig ikke er nok, smid motorsektioner væk fra den anden (den første er ofte en abstrakt "Mozilla", men har ofte nyttige kommentarer; også nogle gange er det faktisk noget konkret, især for webcrawlere).

Når vi parser, skal vi tage højde for, at der nogle gange kan være strenge, der ikke følger dette format. De kan gemmes i en logfil til senere inspektion og derefter blot klippes til den nødvendige længde for at passe til databasen.




  1. Kategorititler på flere sprog i Mysql-databasen

  2. BULK COLLECT LIMIT i UDFØR STRAKS

  3. Antag en menneskelig tilgang til dataforvaltning

  4. MySQL COUNT FORSKEL