cookie介绍
什么是cookie:
在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登入成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登入服务器返回一些数据(cookie)给游览器,然后游览器保存在本地,当该用户发送第二次请求时,就会自动的把上次请求储存的cookie数据自动的携带给服务器,服务器通过游览器携带的数据就能判断当前用户是哪个了。cookie储存的数据是有限的,不同游览器有不同的储存大小,但一般不超过4kb
cookie的格式:
Set-Cookie:NAME-VALUE;Expires/Max-age-DATE;Path=PATH;Domain=DOMAIN;SECURE
参数含义:
NAME:cookie的名字
VALUE:cookie的值
Expires:cookie的过期时间
Path:cookie作用的路径
Domain:cookie作用的域名
SECURE:是否只有https协议下起作用
案例演示
访问人人网大鹏的主页,分为使用cookie和不使用cookie
不使用cookie
#encoding utf-8
# 大鹏董成鹏主页,http://www.renren.com/880151247/profile
from urllib import request
#1.不使用cookie去请求大鹏主页
dapeng_url="http://www.renren.com/880151247/profile"
headers={'Use-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36"}
req=request.Request(url=dapeng_url,headers=headers)
resp=request.urlopen(req)
with open('renrer.html','w') as fp:
#write函数必须写入一个str的数据类型
#resp.read()读出来的是一个bytes数据类型
fp.write(resp.read().decode('utf-8'))
结果只能访问到登入界面
使用cookie
from urllib import request
#2.使用cookie去请求大鹏主页
dapeng_url="http://www.renren.com/880151247/profile"
headers={'Use-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36",
'Cookie':"anonymid=kbp6ig6hqfl6sw; depovince=GW; _r01_=1; JSESSIONID=abciUMdt1Yt9McrS5uxlx; ick_login=70414fef-1357-429e-bae3-d7499aa5c5c1; taihe_bi_sdk_uid=65779e764ef54a03d7eacf40f2533e21; taihe_bi_sdk_session=c3cd118e612729f25444cc843999a709; ick=611a819a-648a-4d7e-afae-befc4f0f5038; t=a2956cc5fba1c6046d3124241990c8219; societyguester=a2956cc5fba1c6046d3124241990c8219; id=974641159; xnsid=28a363e2; XNESSESSIONID=8af4bd50f92c; jebecookies=00cec67a-aadc-4df8-8897-f43f72dc8a78|||||; ver=7.0; loginfrom=null; jebe_key=9669959b-f7a4-4026-8841-4677474a8264%7C8e94499d41e4fb5a899d8432aee352a5%7C1592751204542%7C1%7C1592751356726; jebe_key=9669959b-f7a4-4026-8841-4677474a8264%7C8e94499d41e4fb5a899d8432aee352a5%7C1592751204542%7C1%7C1592751356729; wp_fold=0" }
req=request.Request(url=dapeng_url,headers=headers)
resp=request.urlopen(req)
with open('renrer.html','w',encoding='utf-8') as fp:
#write函数必须写入一个str的数据类型
#resp.read()读出来的是一个bytes数据类型
fp.write(resp.read().decode('utf-8'))
可以直接访问大鹏的主页
保存cookie信息到本地
保存cookie到本地,可以使用cookiejar的save方法,并且需要指定一个文件名
from urllib import request
from http.cookiejar import MozillaCookieJar
cookiejar=MozillaCookieJar('cookie.txt')
handler=request.HTTPCookieProcessor(cookiejar)
opener=request.build_opener(handler)
resp=opener.open('http://httpbin.org/cookies/set?course=math')
cookiejar.save(ignore_discard=True)
将本地cookie信息上传
from urllib import request
from http.cookiejar import MozillaCookieJar
cookiejar=MozillaCookieJar('cookie.txt')
cookiejar.load(ignore_discard=True)
handler=request.HTTPCookieProcessor(cookiejar)
opener=request.build_opener(handler)
resp=opener.open('http://httpbin.org/cookies')
#cookiejar.save(ignore_discard=True)
for cookie in cookiejar:
print(cookie)