快捷搜索:

百度统计的JS脚本原理分析

日期:2019-09-17编辑作者:二战前线
  1. 伸手一段js脚本。
  2. 加载完成时候出发一回呼吁,并传递参数
  3. 退出页面时候,发出三回呼吁,并传递参数,与地点相比较,开掘ep参数有浮动。

        百度计算是依靠cookie的,当呼吁js脚本的时候,会在您计算机里保存贰个恒久cookie,该cookie作为你的客户标记。同一时候发掘,但剥离时候参数ep从最起头的0变为了“7289%2C115”,转义后是“7289,115”那是八个微秒单位,即7.2秒和0.1秒的意趣。同有的时候间前四遍呼吁hm.gif的时候lt参数(时间,javascript:(new Date).getTime())是不改变的。rnd随机数每一次都变。

接下去通进度序模拟这一经过:

def __init__(self,baiduID,targetPage=None,refererPage=None):
"""Constructor"""
self.TargetPage=targetPage or self.TargetPage
self.Referer=refererPage or self.Referer
self.BaiduID=baiduID
self.MyData['si']=self.BaiduID
self.MyData['su']=urllib.quote(self.Referer)
pass
def run(self,timeout=5):
cj=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders=[("Referer",self.TargetPage),("User-Agent",self.UserAgent)]
try:
response=opener.open(self.Hjs+self.BaiduID).info()
self.MyData['rnd']=int(random.random()*2147483647 )
self.MyData['lt']=int(time.time())
fullurl=self.Hgif+urllib.urlencode(self.MyData)
response2=opener.open(fullurl,timeout=timeout).info()
self.MyData['rnd']=int(random.random()*2147483647 )
self.MyData['et']='3'
self.MyData['ep']='2000,100'
response3=opener.open(self.Hgif+urllib.urlencode(self.MyData),timeout=timeout).info()
pass
except urllib2.HTTPError ,ex:
print ex.code
pass
except urllib2.URLError,ex:
print ex.reason
pass
pass

上边大家就来模拟一回呼吁,此次使用的python语言。

从js代码中可以收获,全数参数满含这么些:”cc,cf,ci,ck,cl,cm,cp,cw,ds,ep,et,fl,ja,ln,lo,lt,nv,rnd,sb,se,si,st,su,sw,sse,v”。那些参数的含义大约如下:

当那一个参数都设置达成了(有些参数并不曾赋值),筛选出已经赋值了的参数,并视作hm.baidu.com/hm.gif的参数拼凑出叁个url,如:   。然后央求该图形。

########################################################################
class Baidu:
""""""
Referer=''
TargetPage='/www.lixin.me'
BaiduID=''
Hjs=""
Hgif=""
UserAgent='Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)' #IE9
MyData={'cc':'1','ck':'1','cl':'32-bit','ds':'1024x768','et':'0','ep':'0','fl':'11.0','ja':'1','ln':'zh-cn','lo':'0','nv':'1','st':'3','v':'1.0.17'}
#----------------------------------------------------------------------

 

cc: 不知道,一般为1
cf:url参数hmsr的值
ci:url参数hmci的值
ck:是或不是辅助cookie 1:0
cl:颜色深浅 如 “32-bit”
cm:url参数hmmd的值
cp:url参数hmpl的值
cw:url参数hmkw的值
ds:显示器尺寸,如 ’1024×768′
ep:起先值为’0′,时间变量,反映页面停留时间,格式大致是:今后日子-载入时间+“,”+另一个异常的小的日子值
et:初叶值为’0′,假如ep时间变量不是0的话,它会形成任何
fl:flash版本
ja:java支持 1:0
ln:语言 zh-cn
lo: 不知道,一般为0
lt:日期 time.time(),如“1327847756”, 在第叁次呼吁未有
nv: 不知道,一般为1或者0
rnd:十二位随机数字
sb:借使是360se浏览器该值等于‘17’
se: 和寻找引擎相关
si:总计代码id
st:
su:上一页document.referrer
sw: 不驾驭,估算和索求引擎有关,一般为空
sse:不领悟,揣测和寻觅引擎有关,一般为空
v:总结代码的本子 ,近期该值为“1.0.17”

先是,使用Wireshark(一款互连网抓包工具)对浏览器实际的历程进展捕获。首先是行使ie展开一个有超链接链接到有百度总结的网址,加载达成后关门浏览器。最后在Wireshark上得到这么的网络数据包。

 

import urllib2
import urllib
import random
import math
import urlparse
import time
import cookielib

这段js,实质上是往页面中引进hm.baidu.com/h.js的这段代码,该代码的从头到尾的经过会基于后边的参数有所差异,h.js?后边的参数正是您在百度总括里的id。

<script type=”text/javascript”>
var _bdhmProtocol = ((“https:” == document.location.protocol) ? ” https://” : ” http://”);
document.write(unescape(“%3Cscript src=’” + _bdhmProtocol + “hm.baidu.com/h.js%3F3266e9d3684eaa1337dc7c4b4b64b0ae’ type=’text/javascript’%3E%3C/script%3E”));
</script>

h.js被下载后,便推行其脚本获取一些浏览器相关新闻和访谈来源,获取的音信包含荧屏尺寸、颜色深浅、flash版本、顾客语言等。

 

第一,百度总结会供给大家在要计算的页面中放置一段js语句,类似如下:




能够发掘,浏览器总共向服务器端发送了4次呼吁:

百度总括服务端,通过收到到那些央浼,并从那个图片的网址附带的参数获取相关新闻,记录访客访问记录;当页面被客户关闭的时候,同样会接触三遍呼吁hm.gif的历程,但这些历程不是装有浏览器和具有关闭动作都协理。

if __name__ =="__main__":
a=Baidu('百度总结id','')
a.run()

获得该h.js代码的还要,百度总括会往你的浏览器写入一个名称叫“HMACCOUNT”的cookie,该cookie的超时时间为2038年,所以只要您未曾清空浏览器cookie,基本就不用过期。

本文由澳门新普京发布于二战前线,转载请注明出处:百度统计的JS脚本原理分析

关键词:

跨平台的

   发起的.NETCore开源组织号召,进展的速度是我自己也没有想到的,很多园友都积极参与(虽然有些人诚心砸场子,...

详细>>

如何看待唐家三少的自传体爱情小说

所以好奇这部剧的,可以看看,其实这部剧的细节再好好打磨一下,说不定可以有中国版《请回答1988》的感觉。 三、...

详细>>

能称为作家的却很少

问题: 第四个“中中原人民共和国互联网小说家村”授牌典礼在辽宁省马那瓜市举办,知名网络作家唐家三少受聘成...

详细>>

写毁了吗

问题: 唐家三少的小说《龙王传说》写毁了吗? 回答: 只能说当年一本《斗罗大陆》走上巅峰,到了第二部《绝世...

详细>>