雲打碼破解驗證碼


# -*- coding: utf-8 -*-
import json
import time
import requests
# from logger.log import other


class YDMHttp:
    apiurl = 'http://api.yundama.com/api.php'
    username = ''
    password = ''
    appid = ''
    appkey = ''

    def __init__(self, name, passwd, app_id, app_key):
        self.username = name
        self.password = passwd
        self.appid = str(app_id)
        self.appkey = app_key

    def request(self, fields, files=[]):
        response = self.post_url(self.apiurl, fields, files)
        response = json.loads(response)
        return response

    def balance(self):
        data = {
            'method': 'balance',
            'username': self.username,
            'password': self.password,
            'appid': self.appid,
            'appkey': self.appkey
        }
        response = self.request(data)
        if response:
            if response['ret'] and response['ret'] < 0:
                return response['ret']
            else:
                return response['balance']
        else:
            return -9001

    def login(self):
        data = {'method': 'login', 'username': self.username, 'password': self.password, 'appid': self.appid,
                'appkey': self.appkey}
        response = self.request(data)
        if response:
            if response['ret'] and response['ret'] < 0:
                return response['ret']
            else:
                return response['uid']
        else:
            return -9001

    def upload(self, filename, codetype, timeout):
        data = {'method': 'upload', 'username': self.username, 'password': self.password, 'appid': self.appid,
                'appkey': self.appkey, 'codetype': str(codetype), 'timeout': str(timeout)}
        file = {'file': filename}
        response = self.request(data, file)
        if response:
            if response['ret'] and response['ret'] < 0:
                return response['ret']
            else:
                return response['cid']
        else:
            return -9001

    def result(self, cid):
        data = {'method': 'result', 'username': self.username, 'password': self.password, 'appid': self.appid,
                'appkey': self.appkey, 'cid': str(cid)}
        response = self.request(data)
        return response and response['text'] or ''

    def decode(self, file_name, code_type, time_out):
        cid = self.upload(file_name, code_type, time_out)
        if cid > 0:
            for i in range(0, time_out):
                result = self.result(cid)
                if result != '':
                    return cid, result
                else:
                    time.sleep(1)
            return -3003, ''
        else:
            return cid, ''

    def post_url(self, url, fields, files=[]):
        for key in files:
            files[key] = open(files[key], 'rb')
        res = requests.post(url, files=files, data=fields)
        return res.text

    def report_error(self, cid):
        data = {
            'method': 'report',
            'username': self.username,
            'password': self.password,
            'appid': self.appid,
            'appkey': self.appkey,
            'flag': 0,
            'cid': cid
        }

        response = self.request(data)
        if response:
            if response['ret']:
                return response['ret']
        else:
            return -9001


def code_verificate(name, passwd, file_name, code_type=1005, app_id=4696, app_key='2c03e0bbce32088572a1f51d9d15c567',
                    time_out=60):
    """
    http://www.yundama.com/ 登錄頁
        app_id, app_key 若在項目中使用  自行注冊開發者賬號
    :param name: 雲打碼注冊用戶名,這是普通用戶注冊,而非開發者用戶注冊名
    :param passwd: 用戶密碼
    :param file_name: 需要識別的圖片名
    :param app_id: 軟件ID
    :param app_key: 軟件key
    :param code_type: 1005表示五位字符驗證碼。價格和驗證碼類別,詳細請看http://www.yundama.com/price.html
    :param time_out: 超時時間
    :return: 驗證碼結果
    """
    yundama_obj = YDMHttp(name, passwd, app_id, app_key)
    yundama_obj.login()

    rest = yundama_obj.balance()
    if rest <= 0:
        raise Exception('雲打碼已經欠費了,請及時充值')
    if rest <= 100:
        print('雲打碼余額已不多,請注意及時充值')

    # 開始識別,圖片路徑,驗證碼類型ID,超時時間(秒),識別結果
    cid, result = yundama_obj.decode(file_name, code_type, time_out)
    return result, yundama_obj, cid


if __name__ == '__main__':
    # 雲打碼注冊的登錄用戶名(通過用戶注冊)
    username = '用戶名'
    # 登錄密碼
    password = '密碼'
    # 文件名支持jpg,png
    file_name = '圖片名'
    rs = code_verificate(username, password, file_name, code_type=1005)
    print(rs)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM