cookie

Go实现 爬虫v0.2

家住魔仙堡 提交于 2019-12-06 17:04:25
原址 在之前上一版本中,我们通过最简单的 Get 请求获取了网页地址,并解析出图片地址,然后再通过 Get 请求获取了图片内容。接下来的问题是,对于有登陆限制的网页,登陆之前是看不到相关信息的,那么对于这一类网页该如何处理呢? 1. HTTP 请求与响应的格式 参见 这篇文章 ,我们知道,在浏览器发出 Get 或 Post 请求时,请求的格式大致如下: < request-line > < headers > < blank line > [ < request-body > ] 浏览器在我们访问网页时会自动构造相关请求内容,在 chrome 中 F12 过后看到的视图下,选择 Network 标签并选择下方的 Headers 标签,然后刷新网页,随意选择 Headers 标签左边 Name 栏下的任一元素(一般选第一个)便可看到浏览器发送与接收消息时,消息的 Header 中的内容,如下图: 微博截图 我们需要用到的就是最下面红色标注的 Request Headers 部分的内容 —— 即 cookie 字段 Request Headers 图中的 cookie 即网站存储在浏览器中的 cookie 值,我们将该 cookie 值复制出来,粘贴在我们下一步将要在代码中构造的 Request Header 头中,网站就会认为我们已经登录过了。 2. Go net/http 包

【干货】requests的使用方法

 ̄綄美尐妖づ 提交于 2019-12-06 17:02:42
Requests is an elegant and simple HTTP library for Python, built for human beings. 两个重要的方法:get和post requests.get() 语法 r = requests.get(url, params={}, headers={}, cookies={}, allow_redirects=True, timeout=float, proxies={}, verify=True) 参数说明 参数名 类型 说明 url str 请求地址, 必填 params dict 设置参数,字典类型,如:{‘key1’: ‘value1’, ‘key2’: ‘value2’}; headers dict 设置头部,字典类型,如:{‘user-agent’: ‘my-app/0.0.1’}; cookies dict 设置cookie,字典类型,如:{“key”: “value”}; allow_redirects bool 设置重定向,默认开启; timeout float 设置请求超时时间(s); proxies dict 设置代理,字典类型,如:{“http”: “ http://10.10.1.10:8080 “}; verify bool 设置证书验证,默认True,也可以是CA库地址; 注

Asp.Net Core混合使用cookie和JwtBearer认证方案

爱⌒轻易说出口 提交于 2019-12-06 16:51:18
参照: https://www.cnblogs.com/sunnytrudeau/p/9693512.html MVC部分的登录不赘述,主要是JwtBearer混合部分的问题。 创建JwtSettings类: /// <summary> /// JWT授权的配置项 /// </summary> public class JwtSettings { public JwtSettings() { //CreateKey(); } /// <summary> /// 谁颁发的 /// </summary> public string Issuer { get; set; } /// <summary> /// 颁发给谁 /// </summary> public string Audience { get; set; } /// <summary> /// 令牌密码 /// </summary> public string SecurityKey { get; set; } public int ExpiresMinute { get; set; } = 1440; //默认一天 ///对称秘钥 public SymmetricSecurityKey Key { get { return new SymmetricSecurityKey(Encoding.UTF8.GetBytes

面试八

不羁的心 提交于 2019-12-06 16:31:50
JSP 中动态 include 与静态 include 的区别? 动态 include 用 jsp:include.../ 动作指令实现,适合用于包含动态页面,并且可以带参数。动态 include 不会导入被 include 页面的编译指令,仅仅将被导入页面的 body 内容插入本页面。 静态 include 用<%@ include file=included.htm %>编译指令实现。 静态导入和动态导入有如下三点区别: 静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体 Servlet;而动态导入则在 Servlet 中使用 include 方法来引入被导入页面的内容。 静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用, 只是插入被导入页面的 body 内容。 动态包含还可以增加额外的参数。 JSP 有哪些动作指令? JSP 动作指令主要有如下 7 个: jsp:forward:执行页面转向,将请求的处理转发到下一个页面。 jsp:param:用于传递参数,必须与其他支持参数的标签一起使用。 jsp:include:用于动态包含一个 JSP 页面。 jsp:plugin:用于下载 JavaBean 或 Applet 到客户端执行。 jsp:useBean:创建一个 JavaBean 的实例。 jsp:setProperty:设置

flask的cookie使用

送分小仙女□ 提交于 2019-12-06 16:27:14
cookie基本概念: 一、 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie 和持久Cookie 。 HTTP请求 + cookie的交互流程 二、cookie的缺点: cookie会被附加在每个HTTP请求中,所以无形中增加了流量,影响性能 由于在HTTP请求中的cookie是明文传递的,所以安全性成问题,建议使用https Cookie的大小限制在4KB左右。对于复杂的存储需求来说是不够用的。 三、设置cookie:1.设置cookie是在Response的对象上设置,flask.Response对象有一个set_cookie方法,可以通过这个方法来设置cookie信息 查看cookie信息:借助于抓包工具fiddler、httpwatch、charles、burpsuit等等 四、删除cookie:通过Resposne对象.delete_cookie,指定cookie的key,就可以删除cookie了 示例: 五、设置cookie的有效期:1.max_age:以秒为单位

网络爬虫之scrapy框架详解

ぐ巨炮叔叔 提交于 2019-12-06 16:11:43
twisted介绍 Twisted是用Python实现的基于事件驱动的网络引擎框架,scrapy正是依赖于twisted, 它是基于事件循环的异步非阻塞网络框架,可以实现爬虫的并发。 twisted是什么以及和requests的区别: request是一个python实现的可以伪造浏览器发送Http请求的模块,它封装了socket发送请求 twisted是基于时间循环的异步非阻塞的网络框架,它也封装了socket发送请求,但是他可以单线程的完成并发请求。 twisted的特点是: 非阻塞:不等待 异步:回调 事件循环:一直循环去检查状态 scrapy的pipeline文件和items文件 这两个文件有什么作用 先看看我们上篇的示例: + View Code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 # -*- coding: utf-8 -*- import scrapy class ChoutiSpider(scrapy.Spider): ''' 爬去抽屉网的帖子信息 ''' name = 'chouti' allowed_domains = [

不使用cookie记录用户信息

孤人 提交于 2019-12-06 16:10:39
cookie是什么: cookie是由web服务器保存在用户浏览器(客户端)上的小文件,它可以包含用户信息,用户操作信息等等,无论何时访问服务器,只要同源,就能携带到服务端 常见方式 一般:请求一个接口,返回是否登录,如果登录成功,服务器(set-cookie)设置cookie到浏览器,以后请求api会继续请求 jwt:将用户id.payload.签证进行加密,并且注入到客户端cookie,之后每次请求会在服务端解析该cookie,并获取对应的用户数据,由于存在客户端,所以解放了服务端,减少服务端压力。也可以将该cookie放到根域名下,这样就可以登录一次,遍地开花。 可以看到,常见的方式都是利用cookie(或者浏览器storage),这样你的信息还是会被看到,如果别人获取到你的cookie也有办法进行破解甚至直接复制登录。那么有没有办法不借用cookie来记录用户信息的? 利用缓存存储用户信息 优点:安全可靠 缺点:依赖服务端 原理概述: 请求一个资源,如果设置cache-control、lastmodify、etag等,会进行缓存相关的判定: cache-control:是否强缓存,如果命中直接读取浏览器缓存的上次返回内容 last-modify:如果未命中强缓存,进行时间的判断,如果有if-modified-since并且和last-modify那么读取缓存

实现登录状态保持的两种方法 cookie、session和token

ε祈祈猫儿з 提交于 2019-12-06 16:04:59
实现登录状态保持的两种方法: 第一种,cookie和session的配合使用 实现原理:当用户请求页面,一般需要先登录,用户第一次输入用户名和密码之后,前台发送post请求,后台获取用户信息,通过查询数据库来验证用户信息是否正确,如果验证通过,则会开辟一块session空间来储存用户数据,并且同时生成一个cookie字符串,由后台返回给前台,前台接收后,会把这个cookie字符串储存到浏览器的cookie空间中,这个cookie就相当于一把钥匙,可以打开后台存储对应用户信息的锁,当用户下一次请求的时候,客户端便会自动携带这个cookie去请求服务器,服务器识别后,就会读取session中的用户信息,这样用户就可以直接访问,就不需要再输入用户名密码来验证身份了。 优缺点: 优点是:提升了用户体验,cookie和session的结合使用,比直接在客户端保存用户信息要相对安全;缺点是:当服务器向浏览器传送cookie的时候,很容易被劫持,并不是绝对的安全,还有一点就是,在大型的项目中,服务器往往不只一台,如果第一次请求,用户信息被保存在了服务器1的session空间中,但是第二次请求被分流到了服务器2,这样就获取不到用户信息了,依然要重新登录,所以又引出了另一种方法:token来实现。 第二种,使用token安全令牌 实现原理:当用户请求页面,输入用户信息,服务端经过验证后

【转】Linux curl命令详解

我的未来我决定 提交于 2019-12-06 15:30:13
【From】 https://www.cnblogs.com/duhuo/p/5695256.html 命令:curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。 语法:# curl [option] [url] 常见参数: -A/--user-agent <string> 设置用户代理发送给服务器 -b/--cookie <name=string/file> cookie字符串或文件读取位置 -c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中 -C/--continue-at <offset> 断点续转 -D/--dump-header <file> 把header信息写入到该文件中 -e/--referer 来源网址 -f/--fail 连接失败时不显示http错误 -o/--output 把输出写到该文件中 -O/--remote-name 把输出写到该文件中,保留远程文件的文件名 -r/--range <range> 检索来自HTTP/1.1或FTP服务器字节范围 -s/--silent 静音模式。不输出任何东西 -T/--upload-file <file> 上传文件 -u/--user

12.5 csrf校验和auth模块

梦想的初衷 提交于 2019-12-06 15:18:05
1.基于django中间件的拷贝思想 需求:实现三种通知功能 #方式一: #notify.py def send_email(content): print('邮箱通知:%s'% content) def send_msg(content): print('短信通知:%s'% content) def send_wechat(content): print('微信通知:%s'% content) #start.py from first.notify import * def send_all(content): send_msg(content) send_email(content) send_wechat(content) if __name__ == '__main__': send_all('后天是周末') #方式二: #lib文件夹 #bbb.py name='from bbb' #aaa.py import importlib res='lib.bbb' #利用字符串形式导入模块 md=importlib.import_module(res) #这句相当于 from lib import bbb print(md) #该模块字符串最小单位只能到文件名 #settings.py NOTIFY_LIST=[ 'notify.email.Email', 'notify