1.Cookie的工作原理
(1)浏览器端第一次发送请求到服务器端
(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端
(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie
(4)服务器端通过Cookie中携带的数据区分不同的用户
2.Cookie的优点
(1)简单易用
(2)浏览器负责发送数据
(3)浏览器自动管理不同的站点
3.Cookie的缺点
(1)cookie存储在客户端,安全性差,很容易被黑客获取
(2)存储容量有限,上限为4KB
(3)数量有限,一般为30-50个
(4)如果浏览器安全配置为最高级别,则cookie会失效
(5)不适合大数据的存储,由每个对服务器的请求来传递,速度缓慢效率低
4.Cookie的生命周期
(1)会话cookie:客户端关闭时 Cookie 会删除,因为它没有指定Expires或 Max-Age 指令。但是,Web 浏览器可能会使用会话还原,这会使大多数会话 Cookie 保持永久状态,就像从未关闭过浏览器一样
(2)持久cookie:永久性 Cookie 不会在客户端关闭时过期,而是在特定日期(Expires)或特定时间长度(Max-Age)外过期。例如
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
5.Cookie的常用属性
(1)Name:cookie的名称,cookie一旦创建,名称不可更改
(2)Value:cookie的值,如果值为Unicode字符(保存中文),需要为字符编码,如果值为二进制数据,则需要使用Base64编码(保存二进制图片)
(3)MaxAge:cookie的失效时间,单位秒,如果为证书,则cookie在MaxAge秒之后失效,如果为负数,则cookie为临时cookie,关闭浏览器即失效,如果是0,则表示删除该cookie。默认-1
(4)Secure:该cookie是否仅被使用安全协议传输,安全协议有HTTPS/SSL等,在网络上传输数据之前先将数据加密。默认False
(5)Path:该cookie的使用路径,如果设置为“sessionWeb/”,则只有contextPath为“sessionWeb/”的程序可以访问该cookie,如果设置为“/”,则本域名下contextPath都可以访问该cookie,注意最后一个字符必须为“/”
(6)Domain:可以访问该cookie的域名,如果设置为“.google.com”,则所有以google.com结尾的域名都可以访问该cookie,注意第一个字符必须为“.”
6.Cookie的获取
以下内容转载于:https://www.cnblogs.com/zhe-hello/p/10709897.html
1.mechanize
import os
import mechanize
import cookielib,re
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.set_debug_http(True)
br.addheaders = [('User-agent', '用户ua')]
br.set_proxies({"http": "代理"})
response = br.open('https://www.amazon.com')
cj = br._ua_handlers['_cookies'].cookiejar
for cookie in cj:
print("cookieName:"+cookie.name)
print("cookieValue:"+cookie.value)
cookie = [item.name + ":" + item.value for item in cj]
cookiestr={}
for item in cookie:
name,value = item.split(":")
cookiestr[name]=value
2.urllib
import urllib2
import cookielib
from http import cookiejar
from bs4 import BeautifulSoup
User_Agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
header = {}
header['User-Agent'] = User_Agent
cookie = cookiejar.CookieJar()
cookie_handle=urllib2.HTTPCookieProcessor(cookie)
cookie_opener = urllib2.build_opener(cookie_handle)
# proxy_support = urllib2.ProxyHandler({"http":"5.62.157.47:8085"})
# proxy_opener = urllib2.build_opener(proxy_support)
urllib2.install_opener(cookie_opener)
# urllib2.install_opener(proxy_opener)
request = urllib2.Request("https://www.amazon.com",headers=header)
response = urllib2.urlopen(request)
for item in cookie:
print('Name = ' +item.name)
print('Value =' +item.value)
3.requests
import requests
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
r = requests.get('https://www.amazon.com', headers = headers)
for cookie in r.cookies:
print(cookie.name)
print(cookie.value)
print("=========")
4.selenium
from selenium import webdriver
driver = webdriver.Chrome(executable_path='d:/seop/chromedriver.exe')
driver.get("https://www.amazon.com")
#for c in cookiestr.keys():
# driver.add_cookie({'name':c,'value':cookiestr[c]})
#driver.get("https://www.amazon.com")
cookie = [item["name"] + "=" + item["value"] for item in driver.get_cookies()]
cookiestr = ';'.join(item for item in cookie)
5.phantomjs
from selenium import webdriver
browser = webdriver.PhantomJS()
browser.get("https://www.amazon.com")
cookie = [item["name"] + "=" + item["value"] for item in browser.get_cookies()]
cookiestr = ';'.join(item for item in cookie)
6.scrapy
scrapy shell “https://www.amazon.com”
7.chrome headless