提交 53e60ab9 编写于 作者: 梦想橡皮擦's avatar 梦想橡皮擦 💬

Cookie 反爬

上级 808e14e7
...@@ -12,7 +12,7 @@ def before_request(): ...@@ -12,7 +12,7 @@ def before_request():
# 允许请求通过 # 允许请求通过
return None return None
else: else:
return "错误请求",403 return "错误请求", 403
@antispider.route('/show') @antispider.route('/show')
...@@ -23,3 +23,13 @@ def index(): ...@@ -23,3 +23,13 @@ def index():
@antispider.route('/error403') @antispider.route('/error403')
def error403(): def error403():
return "缺少关键参数", 403 return "缺少关键参数", 403
@antispider.route('/cookie_demo')
def cookie_demo():
if 'story' in request.cookies:
# 如果存在 'story' cookie,则执行相应操作
# ...
return render_template("antispider/cookie_demo.html")
else:
return "没有权限", 403
from flask import render_template from flask import render_template,make_response
from app import app from app import app
import hashlib
""" """
首页相关路由配置 首页相关路由配置
...@@ -11,7 +12,15 @@ def index(): ...@@ -11,7 +12,15 @@ def index():
item = { item = {
"msg": "后台传递信息" "msg": "后台传递信息"
} }
return render_template('index.html', title="梦想橡皮擦", item=item) # 访问首页生成一个 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
@app.route('/bt') @app.route('/bt')
......
{% extends "base.html" %}
{% block content %}
<div class="container text-center mt-3"><h2>这是一个关于边界的故事。</h2>
<p>边界是一个古老的城镇,位于一座山谷之中。它是一个安静而美丽的地方,居民们都很友好,生活在和谐中。</p>
<p>然而,这种平静并不能持久。有一天,一群强盗来到了边界,他们想抢劫和掠夺城镇里的财物。</p>
<p>城镇的居民们很害怕,他们不知道该怎么办。但是,有一个年轻的男孩,他叫纳特尔。纳特尔是一个勇敢和有见识的人,他决定与强盗作斗争。</p>
<p>纳特尔开始计划如何抵抗强盗。他和其他年轻人一起练习武术,并且招募了一些勇敢的城镇居民来加入他的团队。</p>
<p>当强盗来到城镇的时候,纳特尔和他的团队准备迎战。他们用他们所学的武术技巧和勇气抵抗强盗,最终成功击退了他们。</p>
<p>边界的居民们感到非常感激,他们决定把纳特尔当作他们的英雄。从此以后,纳特尔成为了边界的领导者,带领着城镇的居民度过了许多平静的日子。</p>
<p>边界再也没有遇到过强盗的威胁,因为纳特尔和他的团队</p>
<p>继续保护着城镇。他们成为了边界最强大的保护者,并且为了维护和平,他们还和周围的城镇建立了联盟,共同应对任何威胁。</p>
<p>纳特尔也成为了一个很受尊敬的领导者,因为他不仅是一个勇敢的战士,还是一个关心和爱护城镇居民的人。他每天都会和居民们交流,了解他们的需求,并且致力于改善他们的生活。</p>
<p>边界成为了一个幸福而和平的地方,所有的居民都感到自豪和幸福。他们知道,有纳特尔在,他们就不用担心任何威胁。</p>
<p>这就是纳特尔如何成为边界的英雄,带领着城镇度过了许多幸福的日子。他将永远被边界的居民所铭记。</p>
</div>
{% endblock %}
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="{{url_for('static',filename='images/favicon.ico')}}" type="image/x-icon" /> <link rel="shortcut icon" href="{{url_for('static',filename='images/favicon.ico')}}" type="image/x-icon" />
{% if title%} {% if title%}
<title>{{title}} | 爬虫训练场,让天下没有失效的爬虫</title> <title>爬虫训练场 | {{title}} ,让天下没有失效的爬虫</title>
{% else %} {% else %}
<title>爬虫训练场,让天下没有失效的爬虫</title> <title>爬虫训练场,让天下没有失效的爬虫</title>
{%endif%} {%endif%}
......
{% extends "base.html" %} {% extends "base.html" %}
{% block content %} {% block content %}
<div class="alert alert-danger alert-dismissible text-center"> <div class="alert alert-danger alert-dismissible text-center">
<button type="button" class="btn-close" data-bs-dismiss="alert"></button> <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
<strong>爬虫训练场项目</strong> 正在建设中~ <strong>爬虫训练场项目</strong> 正在建设中~
</div> </div>
<div class="container pt-5"> <div class="container pt-5">
<h3 class="text-success">普通爬虫</h3> <h3 class="text-success">普通爬虫</h3>
...@@ -34,9 +34,7 @@ ...@@ -34,9 +34,7 @@
<div class="card border-info rounded-5 shadow-sm" style="min-height:268px;min-width:300px;"> <div class="card border-info rounded-5 shadow-sm" style="min-height:268px;min-width:300px;">
<div class="card-header text-center"> <div class="card-header text-center">
<h4 class="card-title">分页爬虫</h4> <h4 class="card-title">分页爬虫</h4>
<div class="bg-danger text-white rounded p-1"
style="transform: rotate(20deg); position:absolute;right:0;top:0.5rem;">最新更新
</div>
</div> </div>
<div class="card-body"> <div class="card-body">
<p class="card-text">本案例是由 2760 条数据组成的分页爬虫,数据为国内学校清单,主要用于练习分页数据采集。</p> <p class="card-text">本案例是由 2760 条数据组成的分页爬虫,数据为国内学校清单,主要用于练习分页数据采集。</p>
...@@ -103,10 +101,13 @@ ...@@ -103,10 +101,13 @@
<h3 class="text-danger">PC端反爬</h3> <h3 class="text-danger">PC端反爬</h3>
<hr> <hr>
<div class="row align-items-stretch"> <div class="row align-items-stretch">
<div class="col mt-2"> <div class="col mt-2">
<div class="card border-danger rounded-5 shadow-sm" style="min-height:268px;min-width:300px;"> <div class="card border-danger rounded-5 shadow-sm" style="min-height:268px;min-width:300px;">
<div class="card-header text-center"> <div class="card-header text-center">
<h4 class="card-title">UA 参数反爬</h4> <h4 class="card-title">UA 参数反爬</h4>
<div class="bg-danger text-white rounded p-1"
style="transform: rotate(20deg); position:absolute;right:0;top:0.5rem;">最新更新
</div>
</div> </div>
<div class="card-body"> <div class="card-body">
<p class="card-text">该案例要求爬虫程序构造请求头的时候,必须携带 User-Agent 参数,否则会返回403错误。</p> <p class="card-text">该案例要求爬虫程序构造请求头的时候,必须携带 User-Agent 参数,否则会返回403错误。</p>
...@@ -123,11 +124,32 @@ ...@@ -123,11 +124,32 @@
</div> </div>
</div> </div>
</div> </div>
</div> <div class="col mt-2">
<div class="card border-danger rounded-5 shadow-sm" style="min-height:268px;min-width:300px;">
<div class="card-header text-center">
<h4 class="card-title">定值 Cookie 反爬</h4>
<div class="bg-danger text-white rounded p-1"
style="transform: rotate(20deg); position:absolute;right:0;top:0.5rem;">最新更新
</div>
</div>
<div class="card-body">
<p class="card-text">该案例要求爬虫程序的请求头携带固定Cookie值,如果缺少无法访问。</p>
<p class="card-text text-left">难度:⭐</p>
<p class="card-text">
案例:
<a href="/as/cookie_demo" class="card-link text-success">边界故事</a>
</p>
</div>
<div class="card-footer text-end">
</div> <a href="#" class="btn btn-primary card-link ">学习博客</a>
</div>
</div>
</div>
</div>
</div>
{% endblock %} {% endblock %}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册