Django利用Cookie实现反爬虫的例子

作者:Erudite 时间:2023-05-11 19:48:01 

我们知道,Diango 接收的 HTTP 请求信息里带有 Cookie 信息。Cookie的作用是为了识别当前用户的身份,通过以下例子来说明Cookie的作用。例:

浏览器向服务器(Diango)发送请求,服务器做出响应之后,二者便会断开连接(会话结束),下次用户再来请求服务器,服务器没有办法识别此用户是谁,比如用户登录功能,如果没有 Cookie 机制支持,那么只能通过查询数据库实现,并且每次刷新页面都要重新操作一次用户登录才可以识别用户,这会给开发人员带来大量的冗余工作,简单的用户登录功能会给服务器带来巨大的负载压力。

Cookie 是从浏览器向服务器传递数据,让服务器能够识别当前用户,而服务器对 Cookie 的别机制是通过 Session 实现的,Session 存储了当前用户的基本信息,如姓名,年龄和性别等,由于Cookie 存储在浏览器里面,而且Cookie 的数据是由服务器提供的,如果服务器将用户信息直接保存在浏览器中,就很容易泄露用户信息,并且Cookie大小不能超过4KB,不能支持中文,因此要一种机制在服务器的某个域中存储用户数据,这个域就是Session。

总而言之,Cookie 和 Session 是为了解决HTTP协议无状态的弊端、为了让浏览器和服务端建立长久联系的会话而出现的。

Cookie除了解决 HTTP 协议无状态的弊端之外,还可以利用 Cookie 实现反爬虫机制。随着大数据和人工智能的发展,爬虫技术日益完善,网站为了保护自身数据的安全性和负载能力,都会在网站里设置反爬虫机制。

由于 Cookie 是通过 HTTP 协议从浏览器传递到服务器的,因此从视图函数的请求对象 request 可以获取 Cookie 对象,而Diango提供以下方法来操作Cookie对象:


# 获取 Cookie 与 Python 的字典读取方法一致
request。COOKIES['uuid']
request。COOKIES。get('uuid')

# 在响应内容中添加 Cookie, 将 Cookie 返回给浏览器
return HttpResponse('Hello world')
response。set_cookie('key', 'value')
return response

# 在响应内容中删除Cookie
return HttpResponse('Hello world')
response。delete_cookie('key')
return response

操作 Cookie 对象无非就是对 Cookie 进行获取、添加和删除处理。添加Cookie 信息是使用 set_cookie 方法实现的,该方法是由响应类 HttpResponseBase 定义的

  • key:设ECookie的key,类似字典的key。

  • value:设 Cookie的value,类似字典的value。

  • max age:设置Cookie的有效时间,以秒为单位。

  • expires:设置Cookie的有效时间,以日期格式为单位。

  • path:设置Cookie的生效路径,默认值为根目录(网站首页)

  • domain:设置Cookie生效的域名。

  • secure:设置传输方式,若为False,则使用HTTP,否则使用HTTPS。

  • httponly:设置是否只能使用HTTP协议传输。

  • samesite:设置强制模式,可选值为 lax 或 strict,主要防止CSRF攻击。

常见的反爬虫主要是设置参数max_age,expires 和 path。参数 max_age或 expires 用于设置 Cookie 的有效性,使爬程序无法长时间爬取网站数据;参数 path 用于将 Cookie 的生成过程隐藏起来,不容易让爬虫开发者找到并破解。

希望各位读者对Cookie实现反爬虫有一定认识。

来源:https://www.cnblogs.com/xcbb/p/14695251.html

标签:Django,反爬虫,Cookie
0
投稿

猜你喜欢

  • MySQL8.0.26的安装与简化教程(全网最全)

    2024-01-28 11:04:17
  • Python爬虫之超级鹰验证码应用

    2021-04-08 08:22:20
  • python计算方程式根的方法

    2023-08-09 09:54:47
  • Debian中完全卸载MySQL的方法

    2024-01-25 19:25:34
  • Python Pandas 如何shuffle(打乱)数据

    2023-04-22 23:17:16
  • 解决给dom元素绑定click等事件无效问题的方法

    2024-04-16 10:36:42
  • python中的Reportlab模块详解最新推荐

    2023-04-09 21:33:46
  • Vue实现数字时钟效果

    2024-05-13 09:13:47
  • 详解使用vscode+es6写nodejs服务端调试配置

    2023-07-17 17:17:37
  • 详解Python字典的运算

    2021-02-15 16:28:19
  • Python使用random.shuffle()随机打乱字典排序

    2021-05-02 03:12:01
  • Python标准库之typing的用法(类型标注)

    2021-09-27 01:25:24
  • 如何编制一个产生随机密码的函数?

    2009-11-08 19:06:00
  • Python名片管理系统+猜拳小游戏案例实现彩(色控制台版)

    2021-10-26 03:52:44
  • Python执行时间的几种计算方法

    2023-06-09 15:00:47
  • Python语言实现二分法查找

    2021-12-01 18:39:49
  • ie和firefox中css自动换行实现方法

    2008-04-08 12:49:00
  • 解决python写的windows服务不能启动的问题

    2023-01-21 04:10:38
  • wxPython色环电阻计算器

    2023-12-21 20:08:54
  • pandas Dataframe行列读取的实例

    2021-06-11 01:00:45
  • asp之家 网络编程 m.aspxhome.com