猿人学题库第六题——session保持检测——采坑式学习

44 篇文章 3 订阅
37 篇文章 58 订阅

猿人学题库第六题——session保持检测

 

1.  首先 进入 浏览器的开发者工具,

      打开开发者工具找到数据请求,challenge6 就是我们要找的数据请求,查看Header信息是个POST请求,在查看Prevew是返回的数据信息

2. 模拟请求数据

      再次用 postman 模拟请求,可以看到直接返回数据,好的那就没问题,直接撸代码

3.  直接撸代码 

# -*- encoding=utf-8 -*-
import requests

import os
import requests


headers = {
    'Proxy-Connection': 'keep-alive',
    'Pragma': 'no-cache',
    'Cache-Control': 'no-cache',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'X-Requested-With': 'XMLHttpRequest',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Origin': 'http://www.python-spider.com',
    'Referer': 'http://www.python-spider.com/challenge/6',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}

Count = 0
for i in range(1,101):
    data = {
        'page': i
    }
    response = requests.post('http://www.python-spider.com/api/challenge6', headers=headers, data=data, verify=False)

    for data in response.json()['data']:
        # print(int(data['value']))
        Count += int(data['value'])

print(Count)

# 结果 4774618240

  答案一提交,哦豁,错误 ???

把 过程的 reponse的headers 打印查看一下,可以看到有 Set-Cookie,每次可能请求后会修改 cookie,下一次请求携带使用,如果cookie错误可能返回脏数据

这里 用到session 会话,会把reponse的 Set-Cookie 携带给下一次请求使用

# -*- encoding=utf-8 -*-
import requests

import os
import requests


headers = {
    'Proxy-Connection': 'keep-alive',
    'Pragma': 'no-cache',
    'Cache-Control': 'no-cache',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'X-Requested-With': 'XMLHttpRequest',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Origin': 'http://www.python-spider.com',
    'Referer': 'http://www.python-spider.com/challenge/6',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}

Count = 0
session = requests.session()
for i in range(1,101):
    data = {
        'page': i
    }
    response = session.post('http://www.python-spider.com/api/challenge6', headers=headers, data=data, verify=False)



    for data in response.json()['data']:
        # print(int(data['value']))
        Count += int(data['value'])

print(Count)


# 结果 5101310

发现 答案是不是不一样,这样会把脏数据排除掉。提交答案是成功的!!!

 

下面 补充一些 cookie和session的知识:

1.  Cookie的工作原理 

  • 浏览器端第一次发送请求到服务器端
  • 服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端
  • 浏览器端再次访问服务器端时会携带服务器端创建的Cookie
  • 服务器端通过Cookie中携带的数据区分不同的用户

           

2.  Session的工作原理

  • 浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端
  • 浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
  • 服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。
  • name为JSESSIONID的Cookie不存在(关闭或更换浏览器), 请求会去重新去创建Session与特殊的Cookie
  • name为JSESSIONID的Cookie存在,根据value中的SessionId去寻找session对象
  • value为SessionId不存在**(Session对象默认存活30分钟)**,请求会去重新去创建Session与特殊的Cookie
  • value为SessionId存在,返回session对象

            在这里插入图片描述

三、区别对比:

  1. cookie数据存放在客户的浏览器上,session数据放在服务器上
  2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
  3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
  4. 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
  5. 所以:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中

 

总结 : 

这题只要是区别session和cookie,不过在没有答案监测的同时是不知道 有没有脏数据的,这个需要自己在爬虫过程中注意和检查数据了,最后把脏数据排除在外。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.含笑.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值