Cookie
之前一直不知道什么是cookie, 总是听别人说cookie, 就默默当作是直译过来的曲奇饼干. 直到今天~
什么是Cookie
- 我们访问每一个互联网网页, 都是通过HTTP协议进行的, 而HTTP协议是一个无状态的协议, 所谓无状态协议即无法维持回话之间的状态. 假如我们登陆成功了, 我们访问网站的其他网页时, 我们登陆的状态就会丢失, 还需要再登陆一次. 这是非常不方便的.
- 所以此时, 我们需要将对应的会话信息, 比如登陆成功等信息通过一些方法保存下来, 比较常用的方式有两种:
- 通过Cookie保存会话信息, 此时所有的会话信息保存在客户端
- 通过Session保存会话信息,会将对应的会话信息保存在服务端
Cookie 实战
找到实际用户名密码表单提交的网址
以ChinaUnix论坛登陆为例
- 按F12进入调试页面.
- 单击左上角登陆进入登陆页面, 在登陆界面输入用户名密码, 单机登陆. 理论上会将登陆信息表单POST到实际处理用户名密码的网址.
- 这时候network标签下有很多网址, 只有一个是POST类型, 其他都是GET.
- 这个POST类型的URL就是实际网址.
查看登陆所需要的表单类型
- 查看登陆界面源码
- 找到登陆页面的表单中 用户名的name是 username, 密码的name是 password.
开始撸代码
import urllib.request import 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()
|