如何用定值 Cookie 实现反爬详解

作者:梦想橡皮擦 时间:2023-11-15 23:32:18 

【摘要】

用定值 Cookie 实现反爬 Cookie 生成由于本案例需要用到一个特定的 Cookie ,所以我们需要提前将其生成,你可以直接设置一个固定的字符串,也可以使用 Python 加密模块来加密一段文本,例如本案例加密 梦想橡皮擦。下面是一个示例代码,展示了如何使用 Python 的 ha...

博客详细清单,参考 http://shouce.jb51.net/Python_jj/

本次案例,用定值 Cookie 实现反爬

Cookie 生成

由于本案例需要用到一个特定的 Cookie ,所以我们需要提前将其生成,你可以直接设置一个固定的字符串,也可以使用 Python 加密模块来加密一段文本,例如本案例加密 梦想橡皮擦

下面是一个示例代码,展示了如何使用 Python 的 hashlib 模块进行加密:

import hashlib
# 要加密的文本
text = "梦想橡皮擦"
# 使用 sha256 算法进行加密
encrypted_text = hashlib.sha256(text.encode()).hexdigest()
print(encrypted_text)

在这个例子中,我们使用了 hashlib 模块中的 sha256 算法对文本进行加密。这个算法生成了一个长度为 64 位的十六进制哈希值,用于表示加密后的文本。

注意,这个算法只能用于加密文本,而不能用于解密。因此,一旦文本被加密,就无法恢复成原来的文本,即不可逆加密/单项加密。

Python Flask 框架生成 Cookie

在 Python 的 Flask 框架中,可以使用 make_response 函数和 set_cookie 方法来生成一个 Cookie。

例如,下面的代码片段展示了如何在 Flask 中设置一个名为 story 的 Cookie,并将它的值设为前文建立的加密串。

from flask import Flask, make_response
app = Flask(__name__)
@app.route('/')
def index():
   resp = make_response('Setting a cookie')
   encrypted_text = hashlib.sha256(text.encode()).hexdigest()
   resp.set_cookie('story', encrypted_text)
   return resp

在这个例子中,我们使用 make_response() 函数创建了一个响应对象,然后使用 set_cookie() 方法来设置 cookie。最后,我们将响应对象返回给客户端。

注意,上面的代码仅创建了一个简单的 Cookie,它只有名称和值两个部分。你还可以使用其他可选参数来设置 Cookie 的其他属性,例如过期时间、域名等。

接下来为大家在补充一下 make_response() 相关知识。

Flask make_response 加载模板

在 Flask 中,你可以使用 make_response() 函数和模板系统来生成带有模板的响应。

下面是一个示例代码,展示了如何使用 make_response() 函数加载模板:

from flask import Flask, make_response, render_template
app = Flask(__name__)
@app.route('/')
def index():
   # 加载模板并渲染
   rendered_template = render_template('index.html', title='梦想橡皮擦')
   # 使用 make_response 函数创建响应
   resp = make_response(rendered_template)
   return resp

在这个例子中,我们首先使用 Flask 的 render_template() 函数加载并渲染了名为 index.html 的模板。然后我们使用 make_response() 函数创建了一个响应对象,并将渲染后的模板作为响应的内容。最后,我们返回了这个响应对象给客户端。

注意,你需要在 Flask 应用的模板目录中存在名为 index.html 的模板文件,才能正常使用上述代码。

然后我们将该视图函数补充完整,代码在 app/routes.py 文件中。

@app.route('/')
@app.route('/index')
def index():
   item = {
       "msg": "后台传递信息"
   }
   # 访问首页生成一个 Cookie 值,该值用于访问特定页面
   rendered_template = render_template('index.html', title='梦想橡皮擦')
   resp = make_response(rendered_template)
   text = "梦想橡皮擦"
   # 使用 sha256 算法进行加密
   encrypted_text = hashlib.sha256(text.encode()).hexdigest()
   resp.set_cookie('story', encrypted_text)
   return resp

此时当我们访问爬虫训练场首页的时候,就会在 Cookie 中写入一个加密之后的字符串。
通过开发者工具,可以查看到响应头。

如何用定值 Cookie 实现反爬详解

最后一步,就是在 Python Flask 框架中判断刚刚的 Cookie 值,如果存在则响应数据,否则返回 403。

Flask 判断指定 cookie 是否存在

在 Python 的 Flask 框架中,你可以使用 request.cookies 属性来判断指定的 Cookie 是否存在。

例如,下面的代码片段展示了如何判断一个名为 story 的 Cookie 是否存在:

from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def index():
   if 'story' in request.cookies:
       # 如果存在 'story' cookie,则执行相应操作
       # ...
   else:
       # 如果不存在 'story' cookie,则执行相应操作
       # ...

将代码补充完整,文件是 app/antispider/index.py

@antispider.route('/cookie_demo')
def cookie_demo():
   if 'story' in request.cookies:
       # 如果存在 'story' cookie,则执行相应操作
       # ...
       return render_template("antispider/cookie_demo.html")
   else:
       return "没有权限", 403

补充知识点

在 Python 的 Flask 框架中,除了使用 set_cookie() 方法设置 cookie 以外,还有其他几种操作 cookie 的方法。

下面是一些常用的操作 cookie 的方法:

  • 设置 cookie 的值:你可以使用 set_cookie() 方法来设置 cookie 的值。例如:

from flask import Flask, make_response
app = Flask(__name__)
@app.route('/')
def index():
   resp = make_response('Setting a cookie')
   resp.set_cookie('user', 'xiangpica')
   return resp
  • 获取 cookie 的值:你可以使用 request.cookies字典来获取 cookie 的值。例如:

from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def index():
   user = request.cookies.get('user')
   return user
  • 删除 cookie:你可以使用 set_cookie() 方法并将 cookie 的过期时间设为过去的时间来删除 cookie。例如:

from flask import Flask, make_response
app = Flask(__name__)
@app.route('/')
def index():
   resp = make_response('Deleting a cookie')
   resp.set_cookie('user', '', expires=0)
   return resp

本案例到此结束,已更新到 爬虫训练场 欢迎大家访问学习。

项目同步到代码仓库 https://gitcode.net/hihell/spider_playground

来源:https://bbs.huaweicloud.com/blogs/395700?utm_source=juejin&utm_medium=bbs-ex&utm_campaign=other&utm_content=content

标签:定值,Cookie,反爬
0
投稿

猜你喜欢

  • XMLHttp ASP远程获取网页内容代码

    2011-04-10 10:41:00
  • 详解pygame捕获键盘事件的两种方式

    2021-02-27 08:51:54
  • javascript面向对象编程(一)

    2008-03-07 12:54:00
  • CentOS下php使用127.0.0.1不能连接mysql的解决方法

    2023-11-15 08:25:52
  • 基于vue v-for 循环复选框-默认勾选第一个的实现方法

    2024-05-13 09:38:01
  • Python实现随机创建电话号码的方法示例

    2021-08-31 06:38:03
  • JS+HTML5 canvas绘制验证码示例

    2023-07-19 11:23:53
  • IE对CSS样式表的限制和解决方案

    2008-04-28 12:27:00
  • 解决Dreamweaver不支持中文文件名方法

    2008-01-09 12:52:00
  • python中的随机函数random的用法示例

    2022-09-18 01:17:22
  • 浅谈python日志的配置文件路径问题

    2021-01-17 23:39:51
  • Mysql Workbench查询mysql数据库方法

    2024-01-27 19:18:54
  • Python条件语句与循环语句

    2023-01-03 05:07:21
  • Python实现一键改变raw格式照片风格

    2021-04-07 10:48:16
  • div+css实现圆角边框

    2007-10-21 08:55:00
  • 一次MySQL性能优化实战

    2009-03-09 15:01:00
  • python实现生成字符串大小写字母和数字的各种组合

    2021-02-09 07:33:00
  • 如何让Visual Studio用上chatgpt

    2023-09-14 00:54:50
  • js 上传文件预览的简单实例

    2024-06-05 09:11:59
  • 浅谈JS原生Ajax,GET和POST

    2024-04-16 08:52:41
  • asp之家 网络编程 m.aspxhome.com