易车车款信息接口破解


最近爬虫的同事离职,帮忙处理一些爬虫的工作,正好易车获取车款的接口变了,在此记录一下接口参数的破解过程。

找到接口

  1. 随便进入任意一个车型的参数配置页面,例如2021款朗逸

  2. 打开Chrome浏览器的F12调试模式,经排查找到config_new_param接口,其返回的信息正是我们需要的车款信息

    调试模式

尝试调用

  1. python直接调用此接口,带上相同的GET参数,接口返回错误信息
  2. 复制浏览器的所有请求headers,再调用此接口,带上相同的GET参数,接口返回正常数据
  3. 经过多次尝试和精简,最终发现必备的几个请求headers如下

必备参数

破解签名

  1. 使用浏览器生成的请求headers,10分钟就过期了,很明显x-timestamp是请求时间,x-sign是跟时间相关的签名
  2. 查看调用此接口相关的js代码,搜索x-sign,最终找到其签名的逻辑,如下图所示

签名过程 3. 使用Python复制这个逻辑,调用成功

    params = {
        'cid': 508,
        'param': "{\"cityId\":201,\"carId\":\"" + str(car_id) + "\"}"
    }

    ts = int(time.time() * 1000)

    text = 'cid={}'.format(params['cid'])
    text += '&param={}'.format(params['param'])
    text += '19DDD1FBDFF065D3A4DA777D2D7A81EC'
    text += str(ts)

    sign = hashlib.md5(text.encode('utf-8')).hexdigest()
    headers = {
        'x-platform': 'pc',
        'x-sign': sign,
        'x-city-id': '201',
        'x-timestamp': str(ts)
    }