• 网站列表页加密:三次请求后返回内容多\r


    一、抓包第一次请求

    url = 'aHR0cDovL2N5eHcuY24vQ29sdW1uLmFzcHg/Y29saWQ9MTA='
    
    • 1

    抓包,需要清理浏览器cookie,或者无痕模式打开网址,否则返回的包不全,依照下图中的第一个包进行requests请求

    在这里插入图片描述

    第一次请求后返回

    
    
    • 1

    其中stringToHex方法,用于将字符串转换为十六进制表示:

    function stringToHex(str) {
    	var val = "";
    	for (var i = 0; i < str.length; i++) {
    		if (val == "") val = str.charCodeAt(i).toString(16);
    		else val += str.charCodeAt(i).toString(16);
    	}
    	return val;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    用python实现

    def stringToHex(data):
        valu = ''
        for i in range(0, len(data), 1):
            # 获取字符串中索引为 i 的字符的 Unicode 值,并转换为十六进制字符串表示
            unicode_value = ord(data[i])
            val = hex(unicode_value)[2:]  # [2:] 是为了去掉十六进制字符串前面的 '0x' 前缀
            valu = valu + val                     # 顺序不能反,否则转换的十六进制是倒着的
        return valu
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    YunSuoAutoJump()方法,设置了cookies中的一个srcurl值,还有第二次请求的url:

    function YunSuoAutoJump() {
    	var width = screen.width;
    	var height = screen.height;
    	var screendate = width + "," + height;
    	var curlocation = window.location.href;
    	if (-1 == curlocation.indexOf("security_verify_")) {
    		document.cookie = "srcurl=" + stringToHex(window.location.href) + ";path=/;";
    	}
    	self.location = "/Column.aspx?colid=10&security_verify_data=" + stringToHex(screendate);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    screendate是定值,因此

    url2 = url + '&security_verify_data=313232302c363836'
    
    • 1

    二、第二次请求

    观察浏览器抓到的第二个请求的cookies:

    在这里插入图片描述

    发现cookies中除srcurl还有security_verify_data,与第一次请求对比发现,在第一次请求时携带security_verify_data,如下图:

    在这里插入图片描述

    因此第二次请求的cookies为:

    headers1 = resp1.headers.get('Set-Cookie')
    result = headers1.split(';')[0]
    cookies = {}
    key, value = result.split('=')
    cookies[key] = value
    
    key = 'srcurl'
    value = stringToHex(url)
    cookies[key] = value
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    进行第二次请求,返回

    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    由返回可知,第三次请求的url与第一次请求一致,cookies要除去第二次请求的srcurl这个键,再与浏览器中的第三次请求进行对比。

    在这里插入图片描述

    cookies中多了security_session_mid_verify这个键,同理可知,这个值在第二次请求的Set-Cookie处取得,cookies如下

    headers2 = resp2.headers.get('Set-Cookie')
    key, value = headers2.split(';')[0].split('=')
    cookies[key] = value
    cookies.pop('srcurl')    # 删去srcurl键值对
    
    • 1
    • 2
    • 3
    • 4

    三、第三次请求

    resp3 = requests.get(url, headers=headers, verify=False, cookies=cookies).content
    
    • 1

    此网站如果使用requests.get().text返回的内容不对,所以用content查看返回内容,发现是乱码,部分如下:

    \xe5\x9b\xbe\xe7\x89\x87\xe6\x87\x92\xe5\x8a\xa0\xe8\xbd\xbd\r  
    
    • 1

    先解码,再删去返回中的\r,即返回正文内容

    text = resp3.decode().replace('\r', '')
    
    • 1
  • 相关阅读:
    【C++笔试强训】第二十三天
    计算机基础 | 编码 | 原码、反码、补码(整数部分)
    已解决org.springframework.web.client.HttpServerErrorException: 500服务器端HTTP调用错误的正确解决方法,亲测有效!!!
    移动支付新时代——低代码如何对接支付宝和微信支付
    vue xterm4.x自定义请求报文
    rabbitMQ 消息顺序性、消息幂等性、消息不丢失、最终一致性、补偿机制、消息队列设计
    springmvc之自定义注解-->自定义注解简介,基本案例和aop自定义注解
    C++ Vector的模拟实现
    lnmp的搭建与独角数卡2.0.5安装方式
    Nginx详解 五:反向代理
  • 原文地址:https://blog.csdn.net/qq_43695167/article/details/133764804