Cookie
Cookie可以保持登录信息到用户下次与服务器的会话。
Cookie原理
HTTP是无状态的面向连接的协议, 为了保持连接状态, 引入了Cookie机制 Cookie是http消息头中的一种属性,包括:
Cookie名字(Name)
Cookie的值(Value)
Cookie的过期时间(Expires/Max-Age)
Cookie作用路径(Path)
Cookie所在域名(Domain),
使用Cookie进行安全连接(Secure),
指的是该cookies是否能仅能够被安全协议传输。
sameSite是否是同一个站点
前两个参数是Cookie应用的必要条件,另外,还包括Cookie大小(Size,不同浏览器对Cookie个数及大小限制是有差异的)。
Cookiejar
#使用cookiejar的目的:管理cookie,保存cookie值,
#一旦存储cookie之后,下一次发起请求的时候就会携带cookie
#cookie是保存在内存里面的,最后会进行垃圾回收
eg:
from urllib import request,parse
from http.cookiejar import CookieJar
#创建cookiejar对象,目的如上
cookie_jar = CookieJar()
#HTTPCookieProcessor创建handle处理器,管理cookiejar
handler = request.HTTPCookieProcessor(cookie_jar)
#自定义opener
opener = request.build_opener(handler)
#分析发现
# https://www.douban.com/accounts/login
# 没有验证码的情况
# source: index_nav
# form_email: 18518753265
# form_password: ljh12345678
#有验证码的情况
# source: index_nav
# form_email: 18518753265
# form_password: ljh12345678
# captcha-solution: blade
# captcha-id: 5IBtw5wm2riyrIrnV3utwUPt:en
url = 'https://www.douban.com/accounts/login'
form_data = {
'source': 'index_nav',
'form_email': '18518753265',
'form_password': 'ljh12345678',
'captcha-solution': 'noise',
'captcha-id': 'waNQIJD6TkMaF4M51PFg5kYh:en'
}
form_data = parse.urlencode(form_data).encode('utf-8')
#设置请求头
req_header = {
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
}
#够建一个request对象
req = request.Request(url,headers=req_header,data=form_data)
#发起请求
response = opener.open(req)
#登录成功后访问个人主页,能够成功获取到个人主页信息,说明确实保存了cookie
#并且在一下次发起请求的时候携带了cookie
url = 'https://www.douban.com/people/175417123/'
req = request.Request(url,headers=req_header)
response = opener.open(req)
if response.status == 200:
with open('douban.html','w') as file:
file.write(response.read().decode('utf-8'))
网友评论