Example #1
0
    def _get_params(self, endpoint, **kwargs):
        """构造请求参数"""
        params = dict(orderid=self.auth.orderId)
        params.update(kwargs)

        sign_type = kwargs.get('sign_type', None)
        if not sign_type:
            return params

        if not self.auth.apiKey:
            raise KdlNameError("api key is required for signature")

        if sign_type == "simple":
            params['signature'] = self.auth.apiKey

        elif sign_type == "hmacsha1":
            params['timestamp'] = int(time.time())
            if endpoint == EndPoint.SetIpWhitelist.value:
                raw_str = self.auth.get_string_to_sign("POST", endpoint,
                                                       params)
            else:
                raw_str = self.auth.get_string_to_sign("GET", endpoint, params)
            params["signature"] = self.auth.sign_str(raw_str)
        else:
            raise KdlNameError("unknown sign_type {}".format(sign_type))

        return params
Example #2
0
    def get_proxy(self,
                  num=None,
                  order_level=OpsOrderLevel.NORMAL,
                  sign_type="simple",
                  **kwargs):
        """获取开放代理, 默认不需要鉴权
           :param num: 提取数量, sign_type: 鉴权方式, order_level: 开放代理订单类型
           :param kwargs: 其他关键字参数,具体有那些参数请查看帮助中心api说明
           :return 若为json格式, 则返回data中proxy_list部分, 即proxy列表, 否则原样返回
        """
        if num is None:
            raise KdlNameError("miss param: num")
        if not isinstance(num, int):
            KdlTypeError("num should be a integer")
        endpoint = EndPoint.GetOpsProxyNormalOrVip.value
        if order_level == OpsOrderLevel.SVIP:
            endpoint = EndPoint.GetOpsProxySvip.value
        if order_level == OpsOrderLevel.PRO:
            endpoint = EndPoint.GetOpsProxyEnt.value

        params = self._get_params(endpoint,
                                  num=num,
                                  sign_type=sign_type,
                                  **kwargs)
        res = self._get_base_res("GET", endpoint, params)
        if isinstance(res, dict):
            return res['data']['proxy_list']
        return res
Example #3
0
 def query_kps_city(self, serie, **kwargs):
     """查询独享代理有哪些城市可供开通。对于IP共享型还可查询到每个城市可开通的IP数量。
        :return:
     """
     if not serie:
         raise KdlNameError('miss params: serie')
     endpoint = EndPoint.QueryKpsCity.value
     params = self._get_params(endpoint,
                               serie=serie,
                               sign_type="hmacsha1",
                               **kwargs)
     res = self._get_base_res("GET", endpoint, params)
     return res
Example #4
0
 def set_auto_renew(self, autorenew, **kwargs):
     """开启/关闭自动续费
        :return:
     """
     if not autorenew:
         raise KdlNameError('miss param: autorenew')
     endpoint = EndPoint.SetAutoRenew.value
     params = self._get_params(endpoint,
                               autorenew=autorenew,
                               sign_type="hmacsha1",
                               **kwargs)
     res = self._get_base_res("GET", endpoint, params)
     return res
Example #5
0
 def create_order(self, product, pay_type, **kwargs):
     """创建订单,自动从账户余额里结算费用
        :return:
     """
     if not (product and pay_type):
         raise KdlNameError('miss param: product or pay_type')
     endpoint = EndPoint.CreateOrder.value
     params = self._get_params(endpoint,
                               product=product,
                               pay_type=pay_type,
                               sign_type="hmacsha1",
                               **kwargs)
     res = self._get_base_res("GET", endpoint, params)
     return res
Example #6
0
 def check_ops_valid(self, proxy=None, sign_type="simple", **kwargs):
     """检测开放代理有效性, 强制签名验证
        :return 返回data部分, 格式为由'proxy: True/False'组成的列表
     """
     if not proxy:
         raise KdlNameError("miss param: proxy")
     if not (isinstance(proxy, list) or isinstance(proxy, tuple) or isinstance(proxy, str)):
         raise KdlTypeError("proxy should be a instance of list or tuple or str")
     if isinstance(proxy, list) or isinstance(proxy, tuple):
         proxy = ','.join(proxy)
     endpoint = EndPoint.CheckOpsValid.value
     params = self._get_params(endpoint, proxy=proxy, sign_type=sign_type)
     res = self._get_base_res("GET", endpoint, params)
     if isinstance(res, dict):
         return res['data']
     return res
Example #7
0
 def get_kps(self, num=None, sign_type="simple", **kwargs):
     """获取独享代理, 默认"simple"鉴权
        :param num: 提取数量, sign_type: 鉴权方式
        :param kwargs: 其他关键字参数,具体有那些参数请查看帮助中心api说明
        :return 若为json格式, 则返回data中proxy_list部分, 即proxy列表, 否则原样返回
     """
     if num is None:
         raise KdlNameError("miss param: num")
     if not isinstance(num, int):
         KdlTypeError("num should be a integer")
     endpoint = EndPoint.GetKpsProxy.value
     params = self._get_params(endpoint, num=num, sign_type=sign_type, **kwargs)
     res = self._get_base_res("GET", endpoint, params)
     if isinstance(res, dict):
         return res['data']['proxy_list']
     return res
Example #8
0
 def set_ip_whitelist(self, iplist=None, sign_type="simple"):
     """ 设置订单的ip白名单, 强制签名验证
         :param iplist参数类型为 str 或 list 或 tuple
                如果为字符串则ip之间用逗号隔开
         :return 成功则返回True, 否则抛出异常
     """
     if iplist is None:
         raise KdlNameError("miss param: iplist")
     if not (isinstance(iplist, list) or isinstance(iplist, tuple) or isinstance(iplist, str)):
         raise KdlTypeError("iplist type error, should be a instance of list or tuple or str")
     if isinstance(iplist, list) or isinstance(iplist, tuple):
         iplist = ','.join(iplist)
     endpoint = EndPoint.SetIpWhitelist.value
     params = self._get_params(endpoint, iplist=iplist, sign_type=sign_type)
     self._get_base_res("POST", endpoint, params)
     return True
Example #9
0
 def get_tps(self, num=None, sign_type="simple", **kwargs):
     """获取隧道代理IP, 默认"simple"鉴权 https://www.kuaidaili.com/doc/api/gettps/
        :param num : 提取数量,int类型
        :param kwargs: 其他关键字参数,具体有那些参数请查看帮助中心api说明
        :return 若为json格式, 则返回data中proxy_list部分, 即proxy列表, 否则原样返回
     """
     if num is None:
         raise KdlNameError("miss param: num")
     if not isinstance(num, int):
         KdlTypeError("num should be a integer")
     endpoint = EndPoint.GetTps.value
     params = self._get_params(endpoint, num=num, sign_type=sign_type, **kwargs)
     res = self._get_base_res("GET", endpoint, params)
     if isinstance(res, dict):
         return res['data']['proxy_list']
     return res
Example #10
0
 def get_dps_valid_time(self, proxy=None, sign_type="simple", **kwargs):
     """获取私密代理ip有效时间
        :param proxy: 私密代理列表, 格式: IP:PORT, eg: 113.120.61.166:22989,122.4.44.132:21808
        :param sign_type: 认证方式
        :return: 返回data部分, 格式为由'proxy: seconds(剩余秒数)'组成的列表
     """
     if not proxy:
         raise KdlNameError("miss param: proxy")
     if not (isinstance(proxy, list) or isinstance(proxy, tuple) or isinstance(proxy, str)):
         raise KdlTypeError("proxy should be a instance of list or tuple or str")
     if isinstance(proxy, list) or isinstance(proxy, tuple):
         proxy = ','.join(proxy)
     endpoint = EndPoint.GetDpsValidTime.value
     params = self._get_params(endpoint, proxy=proxy, sign_type=sign_type)
     res = self._get_base_res("GET", endpoint, params)
     if isinstance(res, dict):
         return res['data']
     return res
Example #11
0
 def wrapper(self, *args, **kwargs):
     if not self.auth.apiKey:
         raise KdlNameError("apiKey is required for signature")
     return func(self, *args, **kwargs)