コード例 #1
0
ファイル: client.py プロジェクト: xx0746/geetest_test
class Bili:
    def __init__(self):
        dict_user = utils.get_1st_user('client_core/conf/user.toml')
        dict_bili = utils.get_dict_bili('client_core/conf/bili.toml')
        self.user = utils.new_user(dict_user, dict_bili)

        self.name = self.user.name
        self.password = self.user.password
        self.__web_session = WebSession()

    def get_key(self):
        url = f'https://passport.bilibili.com/api/oauth2/getKey'
        params = self.user.sort_and_sign()
        json_rsp = self.__web_session.request_json(
            'POST', url, headers=self.user.dict_bili['appheaders'], params=params)

        data = json_rsp['data']

        pubkey = rsa.PublicKey.load_pkcs1_openssl_pem(data['key'])
        _hash = data['hash']
        crypto_password = base64.b64encode(
            rsa.encrypt((_hash + self.password).encode('utf-8'), pubkey)
        )
        url_password = parse.quote_plus(crypto_password)
        url_name = parse.quote_plus(self.name)

        return url_password, url_name

    def login(self, url_password, url_name, seccode, challenge, validate):

        extra_params = [
            # f'captcha=',
            f'password={url_password}',
            f'username={url_name}',
            f'ts={utils.curr_time()}',
            f'seccode={"" if not seccode else parse.quote_plus(seccode)}',
            f'challenge={"" if not challenge else parse.quote_plus(challenge)}',
            f'validate={"" if not validate else parse.quote_plus(validate)}',

        ]
        params = self.user.sort_and_sign(extra_params)
        print(params)

        url = 'https://passport.bilibili.com/api/v3/oauth2/login'

        json_rsp = self.__web_session.request_json(
            'POST', url, headers=self.user.dict_bili['appheaders'], params=params)
        print(json_rsp)
        if json_rsp['code'] == -105:
            url = json_rsp['data']['url']
            return url
        raise Exception('get_captcha', json_rsp)
コード例 #2
0
ファイル: client.py プロジェクト: xx0746/geetest_test
class CrackClient:
    def __init__(self, url):
        self.__web_session = WebSession()
        self.__url = url

    def request_crack(self, url):
        data = {
            'url': url,
        }
        json_rsp = self.__web_session.request_json('POST', f'{self.__url}/crack', json=data)
        return json_rsp