调用第三方api识别验证码——OCR
来源:Pixiv 画师( 紫李鳥 )
工具类 OCR.py
import base64
import os
import urllib.request
import ssl
def urllib_download(IMAGE_URL,file_path):
os.makedirs('./image/', exist_ok=True)
from urllib.request import urlretrieve
urlretrieve(IMAGE_URL, file_path)
def get_base64_data(file_path):
with open(file_path, 'rb') as f:
image_data = f.read()
base64_data = base64.b64encode(image_data)
return base64_data
def OCR(image):
host = 'https://api.3023data.com'
path = '/ocr/captcha'
method = 'POST'
appcode = '5eec0605766eb73f0bcd4afbb3ec5ff5'
querys = ''
bodys = {}
url =host+path
bodys['image'] = image
bodys['length'] = '''0'''
bodys['type'] = '''1001'''
post_data = urllib.parse.urlencode(bodys).encode('utf8')
request = urllib.request.Request(url, post_data)
request.add_header('Authorization', 'APPCODE ' + appcode)
# 根据API的要求,定义相对应的Content-Type
request.add_header('key','5eec0605766eb73f0bcd4afbb3ec5ff5')
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
response = urllib.request.urlopen(request, context=ctx)
content = response.read()
# os.remove('./image/code.jpg')
if content:
content=eval(str(content,encoding='utf8'))
try:
return content['data']['captcha']
except:
return content['message']
else:
return 'content无效'
测试工具类
import OCR
IMAGE_URL = "http://passport2.chaoxing.com/num/code?1574219706006"
file_path='./image/code.jpg'
OCR.urllib_download(IMAGE_URL,file_path)
msg=OCR.OCR(OCR.get_base64_data(file_path))
print(msg) #建立连接时传入页面即可
实战:
……