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

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

 

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

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

猿人学题库第六题——session保持检测——采坑式学习_第1张图片猿人学题库第六题——session保持检测——采坑式学习_第2张图片

2. 模拟请求数据

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

猿人学题库第六题——session保持检测——采坑式学习_第3张图片

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

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

猿人学题库第六题——session保持检测——采坑式学习_第4张图片

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

猿人学题库第六题——session保持检测——采坑式学习_第5张图片

这里 用到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,不过在没有答案监测的同时是不知道 有没有脏数据的,这个需要自己在爬虫过程中注意和检查数据了,最后把脏数据排除在外。

 

 

你可能感兴趣的:(JS逆向,爬虫,python,python,爬虫,JS逆向,猿人学题库)