网络传输知识:Cookie

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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值