案例-易车网

网站:  https://www.yiche.com/

 

看一下参数:param 应该是 URLEncode 处理了

当浏览器请求参数有 % 这这种符号,URLEncode 处理过,会有一个 view decoded 

点进 view decoded  看看:猜测cityId是城市ID, serialId 是车的ID

再继续看:当user-agent 出现了一堆 x- 开头的参数,需要思考一些这些 x- 开头的参数,是一些非常规的请求头参数。我们得去看在什么地方加上这些参数的,而且是怎么来的。

需要找去搜索,先找找 URL 关键字

接下来全局搜:找到一个,点进去

双击打开:

设断点:然后刷新页面

看一下t的值:

看一下get的值,到底是谁往请求头放的东西:然后点进去

进来之后设置一个断点:

首先找到一个 x-platform

t.headers 是空的

往下走:

看看下面这个:

进来之后打个断点:

看看参数e:

看看参数t:

看看参数n:

看一下this:

往后走:

在此处设断点:

进入axios ,点击进入

设断点:

看参数:

在请求头前面断个点:

看一下e:

看看他返回的内容:

在console输入:

看来有东西,进去看看:

进来后设置一个断点:

看看e是啥:

看一下t:

注意看 cid 是601:

然后到后面: cid 变成 508 了:

t.cid  = f(e,t)   看看 f(e,t) 是多少:

注意看下面的 timestamp 的值:

点一下:

再看一下t的值,其中 timestamp 的值已经变化了

看一下i 的值:

注意看到这里:

看到这,可以知道,s函数会算sign的值

看看s这个函数是干啥的,点进去:

点进来,设置断点:

看一下e,e是发送Ajax请求的参数:

看一下t:

注意这里把 e.data做了一个 stringify 然后值给到 i  :

往后走:

看一下:多看几遍有没有变化

看看r 是啥,点进去:

设置断点:

看看:

pc 的value值就是前面看到的值:

注意看这个 n :和时间戳有关系。

 

算完之后,n 的值:

看一下md5的计算是不是标准的md5,可以看到是一个标准的md5:

看一下n,前面的的部分是请求参数,所以很好获得。

中间的是pc对应的value:

即下面所示:

n 最后部分是时间戳:

 

 

另外一种搜索方式:全局搜索:x-sign,先点击第一个JS文件:

打个断点:

再点击第二个文件:

也打上断点:同时注意两个文件中都是只有一处匹配

两个JS文件都打上断点后,刷新,然后看一下URL对不对:下面这个明显不对。然后放开这个断点:

另外一个打断点的地方的URL是对的,所以接下来观察这个地方:

看一下i的值:观察到  x-platform和 x-timestamp 这两个

然后进去s里面看看:点击进去:

然后进入:可以打断点,然后观察

 

Python代码:

import requests
import time
import json
from hashlib import md5


session = requests.session()
url = "https://mapi.yiche.com/web_api/car_model_api/api/v1/car/config_new_param"

cid = "508"
param = {
    "cityId": "201",
    "serialId": "1661"
}

params = {
    "cid": cid,
    # 参数param是坑..需要处理成json
    "param": json.dumps(param,separators=(',', ':'))
}


tm = str(int(1000 * time.time()))
# 坑: 下面两种md5是不一样的,因为有空格
# # {cityid: xxxx, xxxx: xxx}  => md5
# # {cityid:xxxx,xxxx:xxx}  => md5
# 解决方案   json.dumps(param, separators=(',', ':'))
pm = f"cid={cid}&param={json.dumps(param, separators=(',', ':'))}19DDD1FBDFF065D3A4DA777D2D7A81EC{tm}"

obj = md5()
obj.update(pm.encode("utf-8"))
sign = obj.hexdigest()

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",
    "content-type": "application/json;charset=UTF-8",
    "x-city-id": "201",
    "x-ip-address": "2408:8207:7892:c51:5a1d:c86e:753e:2525",
    "x-platform": "pc",
    "x-sign": sign,
    "x-timestamp": tm,
    "x-user-guid": "bbf83b6180c92a4c7486913f08f79fd7"
}

resp = session.get(url, params=params, headers=headers)

print(resp.request.url)
print(resp.text)

 

posted @ 2023-08-09 15:55  屠魔的少年  阅读(5)  评论(0)    收藏  举报