cookie

Python爬虫入门:Cookie的使用

旧巷老猫 提交于 2019-12-05 20:30:31
大家好哈,上一节我们研究了一下爬虫的异常处理问题,那么接下来我们一起来看一下Cookie的使用。 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的。那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了。 在此之前呢,我们必须先介绍一个opener的概念。 1.Opener 当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。在前面,我们都是使用的默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url, data ,timeout。 如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie的设置。 2.Cookielib cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源。 Cookielib模块非常强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送

http进阶篇

纵然是瞬间 提交于 2019-12-05 19:33:48
MIME数据类型 1. text:即文本格式的可读数据,我们最熟悉的应该就是text/html了,表示超文本文档,此外 还有纯文本text/plain、样式表text/css等。 2. image:即图像文件,有image/gif、image/jpeg、image/png等。 3. audio/video:音频和视频数据,例如audio/mpeg、video/mp4等。 4. application:数据格式不固定,可能是文本也可能是二进制,必须由上层应用程序来解释。 常见的有application/json,application/javascript、application/pdf等,另外,如果实在是不 知道数据是什么类型,像刚才说的“黑盒”,就会是application/octet-stream,即不透明的二 进制数据。 编码格式 Encoding type 1. gzip:GNU zip压缩格式,也是互联网上最流行的压缩格式; 2. deflate:zlib(deflate)压缩格式,流行程度仅次于gzip; 3. br:一种专门为HTTP优化的新压缩算法(Brotli)。 表示浏览器最希望使用的是HTML文件,权重是1,其次是XML文件,权重是0.9,最后是任意数据类型,权重是0.8。服务器收到请求头后,就会计算权重,再根据自己的实际情况优先输出HTML或者XML。

浅析cookie和session

牧云@^-^@ 提交于 2019-12-05 19:14:30
关于 cookie 和 session 的区别: 通常意义上的 cookie 指的是利用客户端的技术在计算机用户的文件夹下存储的文件,又名硬盘 cookie ,一般来说是有上限的。我的 cookie 是存在 D:\Documents and Settings\qixiaobo\Local Settings\Temporary Internet Files 下面,命名规则是 cookie:[ 用户名 ]@[ 网站 ] ,打开后可发现通常是经过 md5 编码的。并且它的换行符在 windows 识别为乱码,表示服务器应该是 Linux 平台。( windows 换行符是 \r\n 而 Linux 换行符是 \r ) 而 session ,又名内存 cookie ,一般而言是指存放在服务器上的,当用户访问某个网站,网站服务器为用户分配一个 Session ID ,一般的表现形式为 JsessionID ,并且也是以 cookie 的形式存放在客户端,但是他的生命周期就是浏览器进程。也就是说当该浏览器进程被关闭后,重新打开后的浏览器访问同一个网站的分配到的 session ID 将不是同一个 session ID 。当 cookie 被禁用后,编码人员应当考虑到这种情况,应该利用 Java 提供的方法重写每一个链接。因为此时浏览器无法提供 cookie 给服务器,所以按照 HTTP

session的生命周期

走远了吗. 提交于 2019-12-05 19:09:09
 Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。    Session什么时候失效?   1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为30分钟。   2. 调用Session的invalidate方法。    Session对浏览器的要求:    虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。   该Cookie为服务器自动生成的,它的maxAge属性一般为-1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享

会话技术Cookie、Session

和自甴很熟 提交于 2019-12-05 19:03:33
会话技术   所谓的会话过程就是指从打开浏览器到关闭浏览器的过程。   一次会话: 打开浏览器 -> 访问一些服务器内容 -> 关闭浏览器。    cookie技术 :是有web服务器保存在用户浏览器(客户端)上    session技术 :是将数据保存到服务器端,session技术的实现依赖于cookie技术 Cookie技术 (不能存中文)   在购物网站上去买一件上衣,这个时候就会把上衣这个对象存入的开辟的Cookie空间中, Cookie空间为此对象绑定一个唯一的标识然后以响应头方式返回给客户端,当再去购买裤子的时候会带着这个唯一标识以请求头的方式存入到Cookie空间中,同时为它绑定唯一的标识。因为Cookie域保存在自己浏览器内部,与别人互不干扰,但因为是客户端技术,所以安全性不高。具体如下图所示:       发送cookie常用方法     1.设置cookie持久化存储时间:setMaxAge(40);单位为s/秒     2.设置cookie携带路径:setPath("/WEB05/SendCookieServlet");     3.发送cookie:response.addCookie(cookie);    获取cookie方法     一般步骤为:       1..获取请求中所有的cookie所在的数组       2

单点登录SSO的实现原理

让人想犯罪 __ 提交于 2019-12-05 18:13:52
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。单点登录在大型网站里使用得非常频繁,例如像阿里巴巴这样的网站,在网站的背后是成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户会疯掉,各子系统也会为这种重复认证授权的逻辑搞疯掉。实现单点登录说到底就是要解决如何产生和存储那个信任,再就是其他系统如何验证这个信任的有效性,因此要点也就以下几个: 存储信任 验证信任 只要解决了以上的问题,达到了开头讲得效果就可以说是SSO。最简单实现SSO的方法就是用Cookie,实现流程如下所示: 不然发现以上的方案是把信任存储在客户端的Cookie里,这种方法虽然实现方便但立马会让人质疑两个问题: Cookie不安全 不能跨域免登 对于第一个问题一般都是通过加密Cookie来处理,第二个问题是硬伤,其实这种方案的思路的就是要把这个信任关系存储在客户端,要实现这个也不一定只能用Cookie,用flash也能解决,flash的Shared Object API就提供了存储能力。 一般说来,大型系统会采取在服务端存储信任关系的做法,实现流程如下所示: 以上方案就是要把信任关系存储在单独的SSO系统(暂且这么称呼它)里

学习第十三天(2019-11-26)

自作多情 提交于 2019-12-05 18:12:37
第二十二章 高级技巧 一、高级函数 1、安全的类型检测 由于typeof会出现无法预知的行为,instanceof在多个全局作用域中并不能正确工作,所以调用Object原生的toString方法,会返回[Object NativeConstructorName]格式字符串。每个类内部都有一个[[Class]]属性,这个属性中就指定了上述字符串中的构造函数名。 原生数组的构造函数名与全局作用域无关,因此使用toString方法能保证返回一致的值,为此可以创建如下函数: 1 function isArray(value){ 2 return Object.prototype.toString.call(value) == "[object Array]"; 3 } 也可以基于这一思路测试某个值是不是原生函数或正则表达式:(这一技巧广泛用来检测原生JSON对象) 1 //判断是否原生函数 2 function isFunction(value){ 3 return Object.prototype.toString.call(value) == "[object Function]"; 4 } 5 //判断是否原生函数 6 function isFunction(value){ 7 return Object.prototype.toString.call(value) == "

cookie和session

让人想犯罪 __ 提交于 2019-12-05 17:52:26
一.cookie 1.cookie的简单认识 http是无状态的,Cookies是作为http的一个扩展诞生的,其主要用途是弥补http的无状态特性。提供了一种保持客户端与服务器端之间状态的途径。 在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。 2.cookie原理 浏览器访问服务端,带着一个空的cookie,然后由服务器产生内容(set_cookie),浏览器收到相应后保存在本地;当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能通过Cookie的内容来判断这个是“谁”了。 3.Djanog设置cookie实例 <form action="/login/" method="POST"> <p>用户名<input type="text" name="username"></p> <p>密码<input type="password" name="password"></p> <p><input type="submit"></p> </form> -------------index.html <h1>hhhhh</h1> {{ user }} -------------urls.py urlpatterns = [ path('admin/', admin.site

请求库之requests库

不羁的心 提交于 2019-12-05 17:42:02
一 介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网页内容下载下来以后,并不会执行js代码,这需要我们自己分析目标站点然后发起新的request请求 #安装:pip3 install requests #各种请求方式:常用的就是requests.get()和requests.post() >>> import requests >>> r = requests.get('https://api.github.com/events') >>> r = requests.post('http://httpbin.org/post', data = {'key':'value'}) >>> r = requests.put('http://httpbin.org/put', data = {'key':'value'}) >>> r = requests.delete('http://httpbin.org/delete') >>> r = requests.head('http://httpbin.org/get') >>> r = requests.options('http://httpbin.org/get') 官网链接:http:/

爬虫之Handler处理器和自定义Opener

心已入冬 提交于 2019-12-05 17:37:36
一、Handler处理器和自定义Opener opener是 request.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的opener(也就是模块帮我们构建好的)。 但是基本的urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能。所以要支持这些功能: 使用相关的 Handler处理器 来创建特定功能的处理器对象; 然后通过 request.build_opener()方法使用这些处理器对象,创建自定义opener对象; 使用自定义的opener对象,调用open()方法发送请求。 如果程序里所有的请求都使用自定义的opener,可以使用request.install_opener() 将自定义的 opener 对象 定义为 全局opener,表示如果之后凡是调用urlopen,都将使用这个opener(根据自己的需求来选择) 二、Handler处理器和自定义Opener from urllib import request # 构建一个HTTPHandler 处理器对象,支持处理HTTP请求 http_handler = request.HTTPHandler() # 调用request.build_opener()方法,创建支持处理HTTP请求的opener对象 opener = request