cookie

scrapy 框架模拟登录_Request、Response

丶灬走出姿态 提交于 2019-12-20 01:21:36
1. Scrapy-Request和Response(请求和响应) Scrapy的Request和Response对象用于爬网网站。 通常,Request对象在爬虫程序中生成并传递到系统,直到它们到达下载程序,后者执行请求并返回一个Response对象,该对象返回到发出请求的爬虫程序。 爬虫RequestResponse创建获取下载数据数据爬虫RequestResponse 2. Request对象 class scrapy.http.Request(url[, callback, method='GET', headers, body, cookies, meta, encoding='utf-8', priority=0, dont_filter=False, errback]) 一个Request对象表示一个HTTP请求,它通常是在爬虫生成,并由下载执行,从而生成Response 参数 url(string) - 此请求的网址 callback(callable) - 将使用此请求的响应(一旦下载)作为其第一个参数调用的函数。有关更多信息,请参阅下面的将附加数据传递给回调函数。如果请求没有指定回调,parse()将使用spider的 方法。请注意,如果在处理期间引发异常,则会调用errback。 method(string) - 此请求的HTTP方法。默认为'GET'

Python 爬虫模拟登陆知乎

余生长醉 提交于 2019-12-20 01:16:58
  在之前写过一篇使用 python爬虫爬取电影天堂资源 的博客,重点是如何解析页面和提高爬虫的效率。由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了一下python模拟登陆,网上关于这部分的资料很多,很多demo都是登陆知乎的,原因是知乎的登陆比较简单,只需要post几个参数,保存cookie。而且还没有进行加密,很适合用来做教学。我也是是新手,一点点的摸索终于成功登陆上了知乎。就通过这篇文章分享一下学习这部分的心得,希望对那些和我一样的初学者有所帮助。   先来说一下,爬虫模拟登陆的基本原理吧,我也是刚开始接触对于一些深层次的东西也不是掌握的很清楚。首先比较重要的一个概念就是cookie,我们都知道HTTP是一种无状态的协议,也就是说当一个浏览器客户端向服务器提交一个request,服务器回应一个response后,他们之间的联系就中断了。这样就导致了这个客户端在向服务器发送请求时,服务器无法判别这两个客户端是不是一个了。这样肯定是不行的。这时cookie的作用就体现出来了。当客户端向服务器发送一个请求后,服务器会给它分配一个标识(cookie),并保存到客户端本地,当下次该客户端再次发送请求时连带着cookie一并发送给服务器,服务器一看到cookie,啊原来是你呀,这是你的东西,拿走吧

爬虫

依然范特西╮ 提交于 2019-12-20 01:13:18
http:   超文本传输协议   默认端口:80 https:   http+ssl(安全套接字层)   默认端口:443 https比http更安全,但是性能更低(耗时更长) GET 和 POST 方法有什么区别呢? 哪些地方会用到post请求:   登录注册(post 比 get 更安全)   需要传输大文本内容的时候(post 请求对数据长度没有要求) 所以同样的,我们的爬虫也需要在这两个地方回去模拟浏览器发送post请求 cookie 和 session的区别: cookie数据存放在客户的浏览器上,session数据存放在服务器上 cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗 session会在一定时间内保存在服务器上,当访问增多,会比较占用你的服务器的性能 单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie 爬虫处理cookie和session 带上cookie,session的好处:   能够请求到登录之后的页面 带上cookie,session的弊端:   一套cookie和session往往和一个用户对应   请求太快,请求次数太多,容易被服务器识别为爬虫 不需要cookie的时候尽量不去使用cookie 但是为了获取登录之后的页面,我们必须发送带有cookies的请求

会话技术

岁酱吖の 提交于 2019-12-19 21:55:54
功能: 在一次会话范围内多次请求,共享数据。 方式: 1,客户端会话技术:Cookie 2,服务器端会话技术:Session Cookie 实现原理: 基于响应头set-cookie和请求头cookie实现 代码实现: Cookie cookie = new Cookie ( "msg" , "hello" ) ; response . addCookie ( cookie ) ; Cookie [ ] cookies = request . getCookies ( ) ; if ( cookies != null ) { for ( Cookie c : cookies ) { String name = c . getName ( ) ; String value = c . getValue ( ) ; System . out . println ( name + ":" + value ) ; } } 细节 1,可以一次发送多个cookie,使用response调用多次addCookie方法发送cookie即可 2,默认情况下,当浏览器关闭后,Cookie数据被销毁。 持久化存储:可以设置setMaxAge(int seconds) 可以取值为: 正数:将Cookie数据写道硬盘文件中。持久化存储。 负数:默认值 零:删除Cookie数据 3,在tomcat 8 之前

前端性能优化策略

为君一笑 提交于 2019-12-19 19:08:58
一、网络加载类 1、减少 HTTP 资源请求次数   合并静态资源图片、JavaScript 或 CSS 代码,减少页面请求数和资源请求消耗   避免重复的资源,防止增加多余请求 2、减小 HTTP 请求大小   减少没必要的图片、JavaScript、CSS 及 HTML 代码   对文件进行压缩优化   使用 gzip 等方式压缩传输文件 3、将 CSS 或 JavaScript 放到外部文件中,避免使用 <style> 或 <script> 标签直接引入   在 HTML 文件中引用外部资源可以有效利用浏览器的静态资源缓存 4、避免页面中空的 href 和 src   当 <link> 标签的 href 属性为空,或 <script> 、 <img> 、 <iframe> 标签的 src 属性为空时,浏览器在渲染的过程中仍会将 href 属性或 src 属性中的空内容进行加载,直至加载失败,这样就阻塞了页面中其他资源的下载进程 , 而且最终加载到的内容是无效的,因此要尽量避免 5、为 HTML 指定 Cache-Control 或 Expires   为 HTMl 内容设置 CaChe-Control 或 Expires 可以将 HTML 内容缓存起来,避免频繁向服务器端发送请求。 <meta http-equiv="Cache-Control" content="max

cookie

五迷三道 提交于 2019-12-19 18:32:15
cookie 定义 ​ 保存在浏览器本地上一组组键值对 特点 1.cookie是由服务器进行设置的 2.浏览器保存在本地的 3.下次访问时自动携带对应的cookie 设置 response.set_cookie(key,value) # Set-Cookie: is_login=1; Path=/ response.set_signed_cookie('is_login','1',salt='xxxx') #两种操作方式相同,第二种推荐,salt='xxxx',以xxxx来进行加盐 response.set_signed_cookie(key,value,salt='xxxx',max_age=5,path='/') #max_age=5,让浏览器记住登录状态的时间最大为五秒,超过五秒清楚is_login 获取 request.COOKIES # {} request.COOKIES[key]# 没有会报错 request.COOKIES.get(key) request.get_signed_cookie(key,salt='xxxx',default='') #default='' 默认值设置为空,不然取不到会报错 删除 response.delete_cookie(key) # 设置键值对的值为空 超时时间为0 来源: https://www.cnblogs.com/-xct

CSRF 攻击

喜夏-厌秋 提交于 2019-12-19 18:27:20
一.CSRF是什么?   CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。 二.CSRF可以做什么?   你这可以这么理解CSRF攻击: 攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。 三.CSRF漏洞现状   CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别 爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI......而 现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。 四.CSRF的原理   下图简单阐述了CSRF攻击的思想:      从上图可以看出,要完成一次CSRF攻击, 受害者必须依次完成两个步骤:   1. 登录受信任网站A,并在本地生成Cookie。   2. 在不登出A的情况下,访问危险网站B。   看到这里,你也许会说:“ 如果我不满足以上两个条件中的一个

java面试必须掌握的技术点--基础篇--(二)

孤者浪人 提交于 2019-12-19 15:06:07
基本功 HTTP 请求的 GET 与 POST 方式的区别 GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。 GET和POST还有一个重大区别,简单的说: GET产生一个TCP数据包; POST产生两个TCP数据包。 长的说: 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。 也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。 因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么? 1. GET与POST都有自己的语义,不能随便混用。 2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。 3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

Tomcat报错Control character in cookie value or attribute.

安稳与你 提交于 2019-12-19 13:08:53
Tomcat若出现如下错误:java.lang.IllegalArgumentException: Control character in cookie value or attribute.如下图所示: 产生该问题原因:Cookie处理中文时编码问题,中文采用的是Unicode编码,而英文采用的是ASCII编码,当Cookie保存中文的时候需要对中文进行编码,而且从Cookie中取出内容的时候也要进行解码。下面举一个例子来解决该问题: <script type="text/javascript"> /*添加cookie*/ function setCookie(name,value,outTime){ var expdate=new Date(); var outms=outTime*24*60*60*1000;//过期时间,以天为单位‘1’表示一天 expdate.setTime(expdate.getTime()+outms); var cookieStr=name+"="+escape(value)+";expires="+expdate.toGMTString(); //escape方法的作用是进行编码,主要防止value中有特殊字符 document.cookie=cookieStr; } /*删除cookie cookie的删除并不是物理意义上的直接删除,

Laravel5.1 请求--Request

≯℡__Kan透↙ 提交于 2019-12-19 09:48:02
我们先来创建一个路由才测试请求实例 Route::controller('articles','ArticlesController'); 创建相应方法: public function getTest(Request $request) { $input = $request->input('test'); echo $input; } 访问http://localhost:8000/articles/test?test=10 来测试。 获取URL路径和请求方法 Request还可以获取url和uri路径: public function getTest(Request $request) { // 如果不是articles/路径就抛出404 if (!$request->is('articles/*')){ abort(404); } $uri = $request->path(); $url = $request->url(); echo $uri; echo '<br />'; echo $url; } 获取请求方法: public function getTest(Request $request) { // 如果不是get方法就抛出404 if (!$request->isMethod('get')){ abort(404); } $method = $request-