उपयोगकर्ता-एजेंट स्ट्रिंग के लिए कोई नियम नहीं हैं, इसलिए पूरी तरह से सही और भविष्य-सबूत पार्सर बनाने का कोई तरीका नहीं है। हालांकि एक सामान्य पैटर्न है:
User-Agent: <engine-string> <engine-string> ...
जहां engine-string
फ़ॉर्म है:
<agent-name> (<comment>; <comment>; ...)
प्रत्येक इंजन स्ट्रिंग (मैंने इसे अभी कहा है कि मेरी समझ से, यह सही नहीं हो सकता है) में टिप्पणियां हो सकती हैं या नहीं भी हो सकती हैं।
उदाहरण के लिए:
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)
(यह एक एकल स्ट्रिंग है, मैंने इसे लाइनों में तोड़ा है।) ऐसा लगता है, जब भी कोई ब्राउज़र इंजन का कांटा करता है, तो वे अपनी बात को अंत तक जोड़ देते हैं। तो हमारे पास कुछ सार "मोज़िला" ब्राउज़र ("प्रथम ब्राउज़र युद्ध" की विरासत) है जो सोचता है कि यह आईफोन पर है। फिर हम देखते हैं कि एक वेबकिट है (जो याद रखता है कि यह कुछ समय पहले केएचटीएमएल के रूप में पैदा हुआ था)। फिर कुछ संस्करण/6.0 संशोधन है, जिसे बाद में मोबाइल/10ए5376e में संशोधित किया गया, जो सफारी/8536.25 बन गया, जो अंततः इस रहस्य को उजागर करता है कि यह वास्तव में एक मोबाइल Google बॉट है।
एक और उदाहरण:
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)
यह एक एकल इंजन है, लेकिन कोष्ठक में कहने के लिए बहुत कुछ है।
तो सामान्य अवलोकन है:
- अंतिम इंजन स्ट्रिंग सबसे महत्वपूर्ण हैं,
- कोष्ठक में अंतिम टिप्पणियाँ कम महत्वपूर्ण हैं।
इसे ध्यान में रखते हुए, मेरा विचार इन इंजनों में स्ट्रिंग को पार्स करना और टोकन पर टिप्पणी करना होगा, फिर प्रत्येक इंजन अनुभाग से पांचवें से शुरू होने वाली टिप्पणियों को फेंक दें। फिर, यदि यह अभी भी पर्याप्त नहीं है, तो दूसरे से शुरू होने वाले इंजन अनुभागों को फेंक दें (पहला अक्सर एक सार "मोज़िला" होता है, लेकिन अक्सर उपयोगी टिप्पणियां होती हैं; कभी-कभी यह वास्तव में कुछ ठोस होता है, खासकर वेब क्रॉलर के लिए)।पी>
पार्स करते समय, हमें यह ध्यान रखना होगा कि कभी-कभी इस प्रारूप का पालन न करने वाले तार हो सकते हैं। बाद में निरीक्षण के लिए उन्हें लॉग फ़ाइल में सहेजा जा सकता है और फिर डेटाबेस में फ़िट होने के लिए आवश्यक लंबाई में कटौती की जा सकती है।