(发完上一篇博客之后,观察了一个星期发现阅读量迟迟突破不了50大关,蓝瘦香菇+心疼自己T.T,于是果然又找到了各种拖延的理由,刚才登博客的时候突然发现有人评论期待我的下篇,立马精神振奋!开始敲字。)
——————————————————————————————————————————————————————————————————————
那么,再次发车。
上一次我们已经实现了“点赞”,却是缺少了“自动”,这一篇,就讲解如何实现“自动“点赞程序。
①探索:在浏览器地址栏输入网址并回车、或点击刷新后,浏览器与Qzone又发生了什么交易~
<1>与上一篇一样,先抓包。演员又是它们,我的两个小号。登录QQ空间后,打开抓包工具,刷新页面,Fiddler里哗啦啦地闪出一排数据包。然而,只有一个主角,那就是我们“刷新”操作时候发出去的数据包。
(浏览器访问空间.png)
(数据包们.png)
<2>照例,分析包。可见,在我们刷新页面后,浏览器向user.qzone.qq.com的相对路径/3236556749使用HTTP请求中的GET方法。(GET和POST的区分百度一搜一大把,我也有点晕。只是单纯地认为GET就是向服务器发个只有headers、body为空的数据包过去,包里含有Cookie,索要/3236556749的内容。而POST则是发包含了非空headers和非空body的数据包,body中含有了该次操作的内容,服务器解读body并实现对应的操作。)
(数据包的headers内容.png)
于是,现在目标就是用Python3的代码实现GET方法了。
代码如下:
与上一章的POST方法类似,使用的是同一个函数。只不过Host改了,method为“GET”,url固定为你的QQ号,body为空,headers仅有Host不一样。<pre name="code" class="python">from http import client; from urllib import parse; headers = {'Host': 'user.qzone.qq.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Accept-Encoding': 'gzip, deflate', 'Cookie': '', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': 1, 'Content-Type': 'application/x-www-form-urlencoded' } headers['Cookie']='*************';#(自己抓) httpClient=client.HTTPConnection('user.qzone.qq.com') #host是user.qzone.qq.com httpClient.request("GET","/3236556749",parse.urlencode({}),headers); #输出获得的内容 response=httpClient.getresponse(); print(response.status);#状态,成功的话是200;常见的错误403表示权限不足,404表示页面不存在。 print(response.reason);#原因,成功的话是ok;失败的话,各种原因 html=response.read(); print(html);#获得的数据包内容
然后,你看到了什么?
b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00\xb4YOo\xdb\xc8\x15?\xab\xc0~\x871\x03H$BQ\x96\xd3\xd8\x8edz\xb1Mb4@\xb6[7^\xa0mj\x08\x149&\x19S\x1c\x9a3\xb2\x1c\xc7\x06\……………(省略n长字符)……………'
这是什么——一串byte类型的'\x1f\x8b'开头的莫名其妙的字符。当时我各种百度,各种懵逼,用了各