Cookie
之前一直不知道什么是cookie, 总是听别人说cookie, 就默默当作是直译过来的曲奇饼干. 直到今天~
什么是Cookie
- 我们访问每一个互联网网页, 都是通过HTTP协议进行的, 而HTTP协议是一个无状态的协议, 所谓无状态协议即无法维持回话之间的状态. 假如我们登陆成功了, 我们访问网站的其他网页时, 我们登陆的状态就会丢失, 还需要再登陆一次. 这是非常不方便的.
- 所以此时, 我们需要将对应的会话信息, 比如登陆成功等信息通过一些方法保存下来, 比较常用的方式有两种:
- 通过Cookie保存会话信息, 此时所有的会话信息保存在客户端
- 通过Session保存会话信息,会将对应的会话信息保存在服务端
 
Cookie 实战
找到实际用户名密码表单提交的网址
以ChinaUnix论坛登陆为例
- 按F12进入调试页面.
- 单击左上角登陆进入登陆页面, 在登陆界面输入用户名密码, 单机登陆. 理论上会将登陆信息表单POST到实际处理用户名密码的网址.
- 这时候network标签下有很多网址, 只有一个是POST类型, 其他都是GET.
- 这个POST类型的URL就是实际网址.
查看登陆所需要的表单类型
- 查看登陆界面源码
- 找到登陆页面的表单中 用户名的name是 username, 密码的name是 password.
开始撸代码
| import urllib.requestimport urllib.parse
 import http.cookiejar
 
 
 url = "http://bbs.chinaunix.net/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=LB81Q"
 
 postdata = urllib.parse.urlencode({
 "username":"716215",
 "password":"zhenghao0.+"
 }).encode('utf-8')
 req = urllib.request.Request(url,postdata)
 
 req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36')
 
 
 cjar = http.cookiejar.CookieJar()
 
 opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))
 
 urllib.request.install_opener(opener)
 
 data = urllib.request.urlopen(req).read()
 
 fhandle = open('/mnt/c/Users/Hox/Desktop/a.html','wb')
 fhandle.write(data)
 fhandle.close()
 
 url2 = "http://bbs.chinaunix.net/"
 req2 = urllib.request.Request(url2,postdata)
 req2.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKi    t/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36')
 data2 = urllib.request.urlopen(req2).read()
 fhandle = open('/mnt/c/Users/Hox/Desktop/b.html','wb')
 fhandle.write(data2)
 fhandle.close()
 
 |