9. 验证码登录 云打码平台使用
本文只用于学习,一切非法用途于本人无关!!!!!!!!!!!!
登录示例
import requests
from fake_useragent import UserAgent
from yzm_util import get_code
headers = {\'User-Agent\': UserAgent().chrome}
# 获取验证码
img_url = \'http://www.yundama.com/index/captcha\'
# 会话保持
session = requests.Session()
resp = session.get(img_url, headers=headers)
# 下载验证码
filename = \'yzm1.jpg\'
with open(filename, \'wb\') as f:
f.write(resp.content)
# 手动
# code = input(\'请输入验证码:\')
# 自动 调用打码平台接口
code = get_code(filename)
# 绘画表单
form_data = {
\'username\': \'用户名\',
\'password\': \'密码\',
\'utype\': 1,
\'vcode\': code,
}
# 发送请求登录
login_url = \'http://www.yundama.com/index/login\'
response = session.get(login_url, params=form_data, headers=headers)
print(response.text)
打码平台文档:
import http.client, mimetypes, urllib, json, time, requests
######################################################################
class YDMHttp:
apiurl = \'http://api.yundama.com/api.php\'
username = \'\'
password = \'\'
appid = \'\'
appkey = \'\'
def __init__(self, username, password, appid, appkey):
self.username = username
self.password = password
self.appid = str(appid)
self.appkey = appkey
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, filename, codetype, timeout):
cid = self.upload(filename, codetype, timeout)
if (cid > 0):
for i in range(0, timeout):
result = self.result(cid)
if (result != \'\'):
return cid, result
else:
time.sleep(1)
return -3003, \'\'
else:
return cid, \'\'
def report(self, cid):
data = {\'method\': \'report\', \'username\': self.username, \'password\': self.password, \'appid\': self.appid,
\'appkey\': self.appkey, \'cid\': str(cid), \'flag\': \'0\'}
response = self.request(data)
if (response):
return response[\'ret\']
else:
return -9001
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
######################################################################
#filename 图片文件
def get_code(filename):
# 用户名
username = \'\'
# 密码
password = \'\'
# 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!
appid = 5785
# 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!
appkey = \'\'
# 图片文件
filename = filename
# 验证码类型,# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html
codetype = 1004
# 超时时间,秒
timeout = 60
# 检查
if (username == \'username\'):
print(\'请设置好相关参数再测试\')
else:
# 初始化
yundama = YDMHttp(username, password, appid, appkey)
# 登陆云打码
uid = yundama.login();
# print(\'uid: %s\' % uid)
# 查询余额
balance = yundama.balance();
print(\'balance: %s\' % balance)
# 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
cid, result = yundama.decode(filename, codetype, timeout);
# print(\'cid: %s, result: %s\' % (cid, result))
return result
######################################################################