from mitmproxy import http
import json
import gzip
import redis

# mitm服务  筛选对应域名下的数据 放入至redis里面
# redis实例  默认其实就是指定本地。不写也可以。
redis_gm = redis.Redis(host='localhost')


class Gmaddon:
    def __init__(self):
        '''需要再添加''' # 需要过滤的域名
        self.host_list = ['log.igengmei.com', 'log.test.igengmei.com']

    def request(self, flow: http.HTTPFlow):
        '''do nothing here'''
        # 进来直接灰度
        # 抓的包里面的 http里面的所有的params
        fields = flow.request.query.fields
        # if flow.request.host.startswith('backend'):
        #     flow.request.host = 'backend.igengmei.com'

        # 修改deviceID 放到 fields里面
        # new_fields = tuple((x, y if x != "device_id" else '51') for x, y in fields)
        # # 又把修改后的参数 赋值给了的params
        # flow.request.query.fields = new_fields

        if flow.request.host in self.host_list:
            # 放在redis里面     下面是固定写法  后面.decode() 是解码
            d = json.loads(gzip.decompress(flow.request.data.content).decode())
            # json返回的不同 有时候最外层是【】 也有可能是{} 这里做一个区分。
            if isinstance(d, list):
                [redis_gm.lpush('maidian', json.dumps(item)) for item in d]
            elif isinstance(d, dict):
                redis_gm.lpush('maidian', json.dumps(d))

# 固定写法
addons = [
    Gmaddon(),
]