Cookie

作者: zy小太阳 | 来源:发表于2018-12-23 16:21 被阅读0次

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

    相关文章

      网友评论

          本文标题:Cookie

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