乐趣区

关于python:web协议之Cookie

Cookie 是什么

RFC6256,HTTP State Management Mechanism

保留在客户端、由浏览器保护、示意利用的 HTTP 头部
  • 寄存在内存或者磁盘中
  • 服务器生成 Cookie 在响应中通过 Set-Cookie 头部告知客户端 (容许多个Set-Cookie 头部传递多个值)
  • 客户端失去 Cookie 后,后续申请都会主动将 Cookie 头部携带至申请中
CookieSet-Cookie 头部的定义
  • Cookie 头部中能够寄存多个 name/value 名值对

    • Cookie:cookie-name=cookie-value;cookie-name=cookie-value;
  • Set-Cookie头部一次只能传递 1 个 name/value 名值对,然而响应中能够含多个头部Set-Cookie

    • Set-Cookie:cooke-name=cookie-value;cookie-av
    • Set-Cookie:cooke-name=cookie-value;cookie-av;cookie-av
    • Set-Cookie:cooke-name=cookie-value;cookie-av;cookie-av
  • cookie-av,cookie 形容的可选属性,比方到期工夫、所属域名,所在门路等
Cookie 形容属性
  • expires:cookie 到期工夫
  • max-age:cookie 存活秒数。(比 expires 优先级更高)
  • domain:cookie 可用于哪些域名。默认能够拜访以后域名
  • path:指定 path 门路下能力应用 cookie
  • secure:只用应用 TLS/SSL协定 (https) 时能力应用 cookie
  • httponly:不能应用 JavaScript (Document.cookie、XMLHttpRequest、Request APIs) 拜访到 cookie
获取百度返回的 cookie
import requests

url = "https://www.baidu.com/"
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
    'Host': "www.baidu.com",

}
response = requests.get(url, headers=headers)
cookies_jar = response.cookies
cookies = dict(cookies_jar)
print(cookies_jar)
print(cookies)

# 失去后果
# <RequestsCookieJar[<Cookie BAIDUID=77BB8AC6AD49976703A431DD42C26C9E:FG=1 for .baidu.com/>, <Cookie BAIDUID_BFESS=77BB8AC6AD49976707A3990E04310903:FG=1 for .baidu.com/>, <Cookie BIDUPSID=77BB8AC6AD49976707A3990E04310903 for .baidu.com/>, <Cookie H_PS_PSSID=1440_33046_33059_31253_33099_33101_32958_26350 for .baidu.com/>, <Cookie PSTM=1606203000 for .baidu.com/>, <Cookie BDSVRTM=0 for www.baidu.com/>, <Cookie BD_HOME=1 for www.baidu.com/>]>
# {'BAIDUID': '77BB8AC6AD49976703A431DD42C26C9E:FG=1', 'BAIDUID_BFESS': '77BB8AC6AD49976707A3990E04310903:FG=1', 'BIDUPSID': '77BB8AC6AD49976707A3990E04310903', 'H_PS_PSSID': '1440_33046_33059_31253_33099_33101_32958_26350', 'PSTM': '1606203000', 'BDSVRTM': '0', 'BD_HOME': '1'}

Cookie 应用的限度

  • RFC 标准对浏览器应用 Cookie 的要求

    • 每条 Cookie 的长度(包含 name、value 以及形容的属性等总长度)至多能反对4kb
    • 每个域名下至多反对 50Cookie
    • 至多要反对 3000Cookie
  • 代理服务器传递 Cookie 时会有限度
  • Cookie 会被附加在每个 HTTP 申请中,所以无形中减少了流量
  • 因为在 HTTP 申请中的 Cookie 是明文传递的,所以安全性成问题(除非用 https)
  • Cookie 的大小不应超过4kb,故对于简单的存储需要来说是不够用的。
退出移动版