曲奇饼干Cookie

Cookie

之前一直不知道什么是cookie, 总是听别人说cookie, 就默默当作是直译过来的曲奇饼干. 直到今天~

什么是Cookie

  • 我们访问每一个互联网网页, 都是通过HTTP协议进行的, 而HTTP协议是一个无状态的协议, 所谓无状态协议即无法维持回话之间的状态. 假如我们登陆成功了, 我们访问网站的其他网页时, 我们登陆的状态就会丢失, 还需要再登陆一次. 这是非常不方便的.
  • 所以此时, 我们需要将对应的会话信息, 比如登陆成功等信息通过一些方法保存下来, 比较常用的方式有两种:
    • 通过Cookie保存会话信息, 此时所有的会话信息保存在客户端
    • 通过Session保存会话信息,会将对应的会话信息保存在服务端

找到实际用户名密码表单提交的网址

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') #设置urlencode编码处理后再设置为utf-8 编码
req = urllib.request.Request(url,postdata) #构建Request对象

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')

#使用http.cookiejar 创建cookieJar对象
cjar = http.cookiejar.CookieJar()
#使用 HTTPCookieProcessor创建COOKIe处理器, 并以其为参数构建opener对象
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))
#将opener安装为全局
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()