美文网首页
Urllib库的使用八---进阶三(Cookie设置)

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

作者: IT的咸鱼 | 来源:发表于2018-10-18 15:24 被阅读0次
    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())
    

    相关文章

      网友评论

          本文标题:Urllib库的使用八---进阶三(Cookie设置)

          本文链接:https://www.haomeiwen.com/subject/relrzftx.html