Urllib库的使用八---进阶三(Cookie设置)

Cookie 是指某些网站服务器为了辨别用户身份和进行Session跟踪,而储存在用户浏览器上的文本文件,Cookie可以保持登录信息到用户下次与服务器的会话。

Cookie原理 HTTP是无状态的面向连接的协议, 为了保持连接状态, 引入了Cookie机制 Cookie是http消息头中的一种属性,包括:

Name Cookie名字
Value Cookie的值
Expires/Max-Age Cookie的过期时间
Path Cookie作用路径
Domain Cookie所在域名
使用Cookie进行安全连接(Secure),指的是该cookies是否能仅能够被安全协议传输。
sameSite是否是同一个站点
  • 前两个参数是Cookie应用的必要条件,另外,还包括Cookie大小(Size,不同浏览器对Cookie个数及大小限制是有差异的)。

Cookies保持状态

  • 当客户端第一次请求服务器时,服务器会返回一个请求头中带有Set-Cookie字段的响应给客户端,用来标记是哪一个用户,客户端浏览器会把Cookies保存起来。当浏览器下一次再请求该网站时,浏览器会把此Cookies放到请求头一起提交给服务器,Cookies携带了会话ID信息,服务器检查该Cookies即可找到对应的会话是什么,然后再判断会话来以此来辨认用户状态。

  • 在成功登录某个网站时,服务器会告诉客户端设置哪些Cookies信息,在后续访问页面时客户端会把Cookies发送给服务器,服务器再找到对应的会话加以判断。如果会话中的某些设置登录状态的变量是有效的,那就证明用户处于登录状态,此时返回登录之后才可以查看的网页内容,浏览器再进行解析便可以看到了。

  • 反之,如果传给服务器的Cookies是无效的,或者会话已经过期了,我们将不能继续访问页面,此时可能会收到错误的响应或者跳转到登录页面重新登录。

  • 所以,Cookies和会话需要配合,一个处于客户端,一个处于服务端,二者共同协作,就实现了登录会话控制。

Cookie由变量名和值组成,根据 Netscape公司的规定,Cookie格式如下:

Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

Cookie应用 Cookies在爬虫方面最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续。

实例

对人人网进行模拟登录
0F9AAB1B-F733-471A-9447-9AE6C6636417
获取到一个有登录信息的Cookie模拟登陆
# -*- coding:utf-8 -*-
import urllib.request

url = 'http://www.renren.com/'

#根据刚才的登录信息来构建一个已经登录过的用户的headers信息

headers = {
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
    'User-Agent':' Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:59.0) Gecko/20100101 Firefox/59.0',
    'Upgrade-Insecure-Requests':'1',
    'Connection':'keep-alive',
    'Host':'www.renren.com',
    'Cookie':'anonymid=jgoj4xlw-3izsk4; depovince=BJ; jebecookies=62d94404-de1f-450a-919b-a2d9f4c8b811|||||; _r01_=1; JSESSIONID=abchsGLNgne0L8_wz2Emw; ick_login=cf54f2dc-8b0b-417a-96b2-32d4051f7236; jebe_key=02cb19ad-2966-4641-8828-217160ca67a0%7Cba6f6d6ec917200a4e17a85dbfe33a4a%7C1525230975024%7C1%7C1525230982574; t=87a502d75601f8e8c0c6e0f79c7c07c14; societyguester=87a502d75601f8e8c0c6e0f79c7c07c14; id=965706174; xnsid=e1264d85; ver=7.0; loginfrom=null; wp_fold=0',
}

# 2. 通过headers里的报头信息(主要是Cookie信息),构建Request对象
request = urllib.request.Request(url, headers=headers)

# 3. 直接访问renren主页,服务器会根据headers报头信息(主要是Cookie信息)
#,判断这是一个已经登录的用户,并返回相应的页面
response = urllib.request.urlopen(request)

# 4. 打印响应内容
print (response.read().decode())
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Se...
    chinariver阅读 5,666评论 1 49
  • 目录Cookie机制什么是CookieCookie的不可跨域名性Unicode编码:保存中文BASE64编码:保存...
    Tomatoro阅读 16,983评论 7 186
  • 作者:静怡,国家二级心理咨询师,萨提亚模式家庭治疗师 编注:本文来自心理咨询师静怡的真实案例,全部文字经过案主本人...
    心理师静怡阅读 1,904评论 0 0
  • 多年前有一个女孩子,跟父亲一起经历了一场屠杀之后格外的偏爱红衣服,他们可能都是鬼,住在森林的深处,尤其是女孩子,执...
    啊小美阅读 245评论 0 2
  • 我可以让自己对生活时时刻刻保持着觉知、觉察的练习,使觉察成为像呼吸一样日常的存在,下功夫练习。有很多时刻会忘记去做...
    拾光小世界阅读 434评论 0 1