示例
import json
import time
import requests
import base64
class YdmVerify(object):
_custom_url = "http://api.jfbym.com/api/YmServer/customApi"
_token = ""
_headers = {
'Content-Type': 'application/json'
}
def common_verify(self, image, verify_type="60000"):
# 数英汉字类型
# 通用数英1-4位 10110
# 通用数英5-8位 10111
# 通用数英9~11位 10112
# 通用数英12位及以上 10113
# 通用数英1~5位plus 10103
# 通用数英1~6位plus 10104
# 定制-数英5位~qcs 9001
# 定制-纯数字4位 193
# 中文类型
# 通用中文字符1~2位 10114
# 通用中文字符 3~5位 10115
# 通用中文字符6~8位 10116
# 通用中文字符9位及以上 10117
# 定制-XX西游苦行中文字符 10107
# 计算类型
# 通用数字计算题 50100
# 通用中文计算题 50101
# 定制-计算题 cni 452
payload = {
"image": base64.b64encode(image).decode(),
"token": self._token,
"type": verify_type
}
print(payload)
resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
print(resp.text)
return resp.json()['data']['data']
def slide_verify(self, slide_image, background_image, verify_type="20101"):
# 滑块类型
# 通用双图滑块 20111
payload = {
"slide_image": base64.b64encode(slide_image).decode(),
"background_image": base64.b64encode(background_image).decode(),
"token": self._token,
"type": verify_type
}
resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
print(resp.text)
return resp.json()['data']['data']
def sin_slide_verify(self, image, verify_type="20110"):
# 通用单图滑块(截图) 20110
payload = {
"image": base64.b64encode(image).decode(),
"token": self._token,
"type": verify_type
}
resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
print(resp.text)
return resp.json()['data']['data']
def traffic_slide_verify(self, seed, data, href, verify_type="900010"):
# 定制-滑块协议slide_traffic 900010
payload = {
"seed": seed,
"data": data,
"href": href,
"token": self._token,
"type": verify_type
}
resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
print(resp.text)
return resp.json()['data']['data']
def click_verify(self, image, label_image=None, extra=None, verify_type="30100"):
# 通用任意点选1~4个坐标 30009
# 通用文字点选1(extra,点选文字逗号隔开,原图) 30100
# 定制-文字点选2(extra="click",原图) 30103
# 定制-单图文字点选 30102
# 定制-图标点选1(原图) 30104
# 定制-图标点选2(原图,extra="icon") 30105
# 定制-语序点选1(原图,extra="phrase") 30106
# 定制-语序点选2(原图) 30107
# 定制-空间推理点选1(原图,extra="请点击xxx") 30109
# 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110
# 定制-tx空间点选(extra="请点击侧对着你的字母") 50009
# 定制-tt_空间点选 30101
# 定制-推理拼图1(原图,extra="交换2个图块") 30108
# 定制-xy4九宫格点选(原图,label_image,image) 30008
payload = {
"image": base64.b64encode(image).decode(),
# "label_image": base64.b64encode(label_image).decode(),
"token": self._token,
"type": verify_type
}
if extra:
payload['extra'] = extra
resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
print(resp.text)
return resp.json()['data']['data']
def rotate(self, out_ring_image, inner_circle_image):
# 定制-X度单图旋转 90007
# payload = {
# "image": base64.b64encode(image).decode(),
# "token": self._token,
# "type": "90007"
# }
# 定制-Tt双图旋转,2张图,内圈图,外圈图 90004
payload = {
"out_ring_image": base64.b64encode(out_ring_image).decode(),
"inner_circle_image": base64.b64encode(inner_circle_image).decode(),
"token": self._token,
"type": "90004"
}
resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
print(resp.text)
return resp.json()['data']['data']
def google_verify(self, googlekey, pageurl, invisible=1, data_s=""):
_headers = {
'Content-Type': 'application/json'
}
"""
第一步,创建验证码任务
:param
:return taskId : string 创建成功的任务ID
"""
url = "http://122.9.52.147/api/YmServer/funnelApi"
payload = json.dumps({
"token": self._token,
# "type": "40011", ## v3
"type": "40010", ## v2
"googlekey": googlekey,
"enterprise": 1, ## 是否为企业版
"pageurl": pageurl,
"invisible": invisible,
"data-s": data_s,
# 'action':"TEMPLATE" #V3必传
})
# 发送JSON格式的数据
result = requests.request("POST", url, headers=_headers, data=payload).json()
print(result)
# {'msg': '识别成功', 'code': 10000, 'data': {'code': 0, 'captchaId': '51436618130', 'recordId': '74892'}}
captcha_id = result.get('data').get("captchaId")
record_id = result.get('data').get("recordId")
times = 0
while times < 150:
try:
url = f"http://122.9.52.147/api/YmServer/funnelApiResult"
data = {
"token": self._token,
"captchaId": captcha_id,
"recordId": record_id
}
result = requests.post(url, headers=_headers, json=data).json()
print(result)
# {'msg': '结果准备中,请稍后再试', 'code': 10009, 'data': []}
if result['msg'] == "结果准备中,请稍后再试":
time.sleep(5)
times += 5
continue
if result['msg'] == '请求成功' and result['code'] == 10001:
print(result['data']['data'])
return result['data']['data']
# {'msg': '请求成功', 'code': 10001, 'data': {'data': '03AGdBq2611GTOgA2v9HUpMMEUE70p6dwOtYyHJQK4xhdKF0Y8ouSGsFZt647SpJvZ22qinYrm6MYBJGFQxMUIApFfSBN6WTGspk6DmFdQAoWxynObRGV7qNMQOjZ_m4w3_6iRu8SJ3vSUXH_HHuA7wXARJbKEpU4J4R921NfpKdahgeFD8rK1CFYAqLd5fz4l-8_VRmRE83dRSfkgyTN338evQ1doWKJRipZbk4ie-89Ud0KGdOsP4QzG3stRZgj2oaEoMDSAP62vxKGYqtDEqTcwtlgo-ot3rF5SmntaoKGwcKPo0NrekWA5gtj0vqKLU6lY2GcnSci_tgBzBwuH40uvyR1PFu02VK_E44mopJ7FOO4cUukNaLGqypU2YCA8QuaaebOIoCMU7RGqGs_41RYNCG1GSdthiwcwk2hHFbi-TXuICXSwh4Er5mgVW9A3t_9Ndp0eJcyr3HtuJrcA7BtlcgruuQxK5h4Ew4ert4KPH_aQGN9ww5VsUtbSManzUDnUOs7aEdvFk1DOOPmLys-aX20ZFN2CcQcZZSO-7HZpZZt3EDeWWE5S02HFDY8gl3_0xqIts8774Tr4GMVJaddG0NR6pcBFC11FqNcK2a18gM3gaKDy3_2ZMeSU4nj4NWwoAhPjQN2BS8JxX4kKVpX4rD959kc93vczVD3TYD6_4GJahGSpBvM7Y5_GGIdLL8imXde1R35mZnEcFYXQ40zcy3DdJFkk_gzGTVOEb1Q1IZpjMxzCxyGgwjgL9dtDIgst5H5CSZoerX_Lz-DmsBvYIYZdpbPLEMROx9MODImaEw8Cp6M8Xj7_foijiGE9hh-pzJSTlKl3HytiSUyJJ7r1BssrX5C_TFWxl0IXNg8azP8H-ZIOWwnYlMWCS1w9piHdoLg5zACiYIN3Txdlsvi61MuPmzJggJd1_dlyMdAlzb5_zdfweqj0_Ko1ODP378YT7sV7LECgRj5QJU6sF5nlf4m2g5sFypBw9GFAkEE-OaWGYxRJOy2ioU41ggAJIkcza2B_N5AL2KLROtm0-c2MxplM4ZzHxrUv9A24zlgzo3Pz4NONwU_gaOcDB7j1dZKXD8UaoIrZv0BTd8JeojYowm9Usdg7Rt4Fpo_vDLJdrEUfbxVlXieDD9Fr1fu72-d4AduT_J3n-rIhyX4gFav-KfP-qOxqOZsmjXZirsBxZs7042NYeirRYnLv35cxIAJARz03FJmeKViUivwC5mCWw64hjRad9XyyBOP2n8KFOrTXhPskC-WwEfksGtfLxi6VW76FHGvRdwHXzMwVfNqe3P5H_WZUc-vxeTAsTnqZz3WA97lM4MLrX0nTZYgXxCEiS6raSOiEMqcx_Nv7Zxre-abj4LZRbFpH8nx1SEiaOV2Dm-a1iPFEmCs0L4kDtt6VImSVIQaTOAd3KFSo7W_XTvRPsQJOtblrcKyuagztX_Yr0lT0YqN9I9MZAARo7M5OfwSLJW16rdmp4NuRefEvNPNHO2cVh1Xha1qNGuF_QDvWFFmWG0Y6IbRqLmF-Dv8BY4TWyOeVnADJftGQw2QSr8RmbCHryA'}}
except Exception as e:
print(e)
continue
def fun_captcha_verify(self, publickey, pageurl, verify_type="40007"):
# 定制类接口-Hcaptcha 40007
payload = {
"publickey": publickey,
"pageurl": pageurl,
"token": self._token,
"type": verify_type
}
resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
print(resp.text)
return resp.json()['data']['data']
def hcaptcha_verify(self):
# 定制类接口-Hcaptcha
_headers = {
'Content-Type': 'application/json'
}
_custom_url = "http://api.jfbym.com/api/YmServer/funnelApi"
payload = {
"sitekey": "",
"pageurl": "",
"token": self._token,
"type": '50013'
}
result = requests.post(_custom_url, headers=_headers, data=json.dumps(payload)).json()
print(result)
captcha_id = result.get('data').get("captchaId")
record_id = result.get('data').get("recordId")
times = 0
while times < 150:
try:
url = f"http://api.jfbym.com/api/YmServer/funnelApiResult"
data = {
"token": self._token,
"captchaId": captcha_id,
"recordId": record_id
}
result = requests.post(url, headers=_headers, json=data).json()
print(result)
# {'msg': '结果准备中,请稍后再试', 'code': 10009, 'data': []}
if result['msg'] == "结果准备中,请稍后再试":
time.sleep(5)
times += 5
continue
if result['msg'] == '请求成功' and result['code'] == 10001:
print(result['data']['data'])
return result['data']['data']
# {'msg': '请求成功', 'code': 10001, 'data': {'data': '03AGdBq2611GTOgA2v9HUpMMEUE70p6dwOtYyHJQK4xhdKF0Y8ouSGsFZt647SpJvZ22qinYrm6MYBJGFQxMUIApFfSBN6WTGspk6DmFdQAoWxynObRGV7qNMQOjZ_m4w3_6iRu8SJ3vSUXH_HHuA7wXARJbKEpU4J4R921NfpKdahgeFD8rK1CFYAqLd5fz4l-8_VRmRE83dRSfkgyTN338evQ1doWKJRipZbk4ie-89Ud0KGdOsP4QzG3stRZgj2oaEoMDSAP62vxKGYqtDEqTcwtlgo-ot3rF5SmntaoKGwcKPo0NrekWA5gtj0vqKLU6lY2GcnSci_tgBzBwuH40uvyR1PFu02VK_E44mopJ7FOO4cUukNaLGqypU2YCA8QuaaebOIoCMU7RGqGs_41RYNCG1GSdthiwcwk2hHFbi-TXuICXSwh4Er5mgVW9A3t_9Ndp0eJcyr3HtuJrcA7BtlcgruuQxK5h4Ew4ert4KPH_aQGN9ww5VsUtbSManzUDnUOs7aEdvFk1DOOPmLys-aX20ZFN2CcQcZZSO-7HZpZZt3EDeWWE5S02HFDY8gl3_0xqIts8774Tr4GMVJaddG0NR6pcBFC11FqNcK2a18gM3gaKDy3_2ZMeSU4nj4NWwoAhPjQN2BS8JxX4kKVpX4rD959kc93vczVD3TYD6_4GJahGSpBvM7Y5_GGIdLL8imXde1R35mZnEcFYXQ40zcy3DdJFkk_gzGTVOEb1Q1IZpjMxzCxyGgwjgL9dtDIgst5H5CSZoerX_Lz-DmsBvYIYZdpbPLEMROx9MODImaEw8Cp6M8Xj7_foijiGE9hh-pzJSTlKl3HytiSUyJJ7r1BssrX5C_TFWxl0IXNg8azP8H-ZIOWwnYlMWCS1w9piHdoLg5zACiYIN3Txdlsvi61MuPmzJggJd1_dlyMdAlzb5_zdfweqj0_Ko1ODP378YT7sV7LECgRj5QJU6sF5nlf4m2g5sFypBw9GFAkEE-OaWGYxRJOy2ioU41ggAJIkcza2B_N5AL2KLROtm0-c2MxplM4ZzHxrUv9A24zlgzo3Pz4NONwU_gaOcDB7j1dZKXD8UaoIrZv0BTd8JeojYowm9Usdg7Rt4Fpo_vDLJdrEUfbxVlXieDD9Fr1fu72-d4AduT_J3n-rIhyX4gFav-KfP-qOxqOZsmjXZirsBxZs7042NYeirRYnLv35cxIAJARz03FJmeKViUivwC5mCWw64hjRad9XyyBOP2n8KFOrTXhPskC-WwEfksGtfLxi6VW76FHGvRdwHXzMwVfNqe3P5H_WZUc-vxeTAsTnqZz3WA97lM4MLrX0nTZYgXxCEiS6raSOiEMqcx_Nv7Zxre-abj4LZRbFpH8nx1SEiaOV2Dm-a1iPFEmCs0L4kDtt6VImSVIQaTOAd3KFSo7W_XTvRPsQJOtblrcKyuagztX_Yr0lT0YqN9I9MZAARo7M5OfwSLJW16rdmp4NuRefEvNPNHO2cVh1Xha1qNGuF_QDvWFFmWG0Y6IbRqLmF-Dv8BY4TWyOeVnADJftGQw2QSr8RmbCHryA'}}
except Exception as e:
print(e)
continue
if __name__ == '__main__':
y = YdmVerify()
y.hcaptcha_verify()
import cn.hutool.json.JSONArray;
import com.alibaba.fastjson.JSONObject;
import net.dongliu.requests.Requests;
import sun.misc.BASE64Encoder;
import java.util.HashMap;
import java.util.Map;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
//dependencies: net.dongliu.requests,com.alibaba.fastjson
//net.dongliu.requests 这个jar请看 https://blog.csdn.net/dxh0823/article/details/81137400/
public class YdmVerify {
private static final String CustomUrl = "http://api.jfbym.com/api/YmServer/customApi";
private static final String Token = "";
Map headers = new HashMap<>();
public YdmVerify() {
headers.put("Content-Type", "application/json");
}
/// 所有image 参数皆为 图片字节流base64之后的的字符串
public String commonVerify(String imageContent) {
// # 数英汉字类型
// # 通用数英1-4位 10110
// # 通用数英5-8位 10111
// # 通用数英9~11位 10112
// # 通用数英12位及以上 10113
// # 通用数英1~6位plus 10103
// # 定制-数英5位~qcs 9001
// # 定制-纯数字4位 193
// # 中文类型
// # 通用中文字符1~2位 10114
// # 通用中文字符 3~5位 10115
// # 通用中文字符6~8位 10116
//# 通用中文字符9位及以上 10117
//# 定制-XX西游苦行中文字符 10107
// # 计算类型
//# 通用数字计算题 50100
// # 通用中文计算题 50101
// # 定制-计算题 cni 452
String verify_type;
verify_type = "10110";
JSONObject jsonObject = new JSONObject();
jsonObject.put("image", imageContent);
jsonObject.put("type", verify_type);
jsonObject.put("token", Token);
String resp = Requests.post(CustomUrl).headers(headers).jsonBody(jsonObject).send().readToText();
System.out.println(resp);
return resp;
}
public String slideVerify(String slideImage, String backgroundImage) {
// # 通用滑块
// # 请保证购买相应服务后请求对应 verify_type
// # verify_type="20111" 单次积分
// # slide_image 需要识别图片的小图片的base64字符串
// # background_image 需要识别图片的背景图片的base64字符串(背景图需还原)
String verify_type;
verify_type = "20101";
JSONObject jsonObject = new JSONObject();
jsonObject.put("slide_image", slideImage);
jsonObject.put("background_image", backgroundImage);
jsonObject.put("type", verify_type);
jsonObject.put("token", Token);
String resp = Requests.post(CustomUrl).headers(headers).jsonBody(jsonObject).send().readToText();
System.out.println(resp);
return resp;
}
public String sinSlideVerify(String Image) {
// # 通用单图滑块(截图) 20110
// # 请保证购买相应服务后请求对应 verify_type
// # verify_type="20110" 单次积分
String verify_type;
verify_type = "20110";
JSONObject jsonObject = new JSONObject();
jsonObject.put("image", Image);
jsonObject.put("type", verify_type);
jsonObject.put("token", Token);
String resp = Requests.post(CustomUrl).headers(headers).jsonBody(jsonObject).send().readToText();
System.out.println(resp);
return resp;
}
public String trafficSlideVerify(String seed, String data, String href) {
// # 定制-滑块协议slide_traffic 900010
String verify_type;
verify_type = "900010";
JSONObject jsonObject = new JSONObject();
jsonObject.put("seed", seed);
jsonObject.put("data", data);
jsonObject.put("href", href);
jsonObject.put("type", verify_type);
jsonObject.put("token", Token);
String resp = Requests.post(CustomUrl).headers(headers).jsonBody(jsonObject).send().readToText();
System.out.println(resp);
return resp;
}
public String clickVerify(String image, String extra) {
// # 通用任意点选1~4个坐标 30009
// # 通用文字点选1(extra,点选文字逗号隔开,原图) 30100
// # 定制-文字点选2(extra="click",原图) 30103
// # 定制-单图文字点选 30102
// # 定制-图标点选1(原图) 30104
// # 定制-图标点选2(原图,extra="icon") 30105
// # 定制-语序点选1(原图,extra="phrase") 30106
// # 定制-语序点选2(原图) 30107
// # 定制-空间推理点选1(原图,extra="请点击xxx") 30109
// # 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110
// # 定制-tx空间点选(extra="请点击侧对着你的字母") 50009
// # 定制-tt_空间点选 30101
//# 定制-推理拼图1(原图,extra="交换2个图块") 30108
//# 定制-xy4九宫格点选(原图,label_image,image) 30008
//# 如有其他未知类型,请联系我们
String verify_type;
verify_type = "30100";
JSONObject jsonObject = new JSONObject();
jsonObject.put("image", image);
if (extra != null) {
jsonObject.put("extra", extra);
}
jsonObject.put("type", verify_type);
jsonObject.put("token", Token);
String resp = Requests.post(CustomUrl).headers(headers).jsonBody(jsonObject).send().readToText();
System.out.println(resp);
return resp;
}
;
public String Rotate(String image) {
//# 定制-X度单图旋转 90007
String verify_type;
verify_type = "90007";
JSONObject jsonObject = new JSONObject();
jsonObject.put("image", image);
// # 定制-Tt双图旋转,2张图,内圈图,外圈图 90004
// verify_type = "90004";
// jsonObject.put("out_ring_image", image);
// verify_type = "90004";
// jsonObject.put("inner_circle_image", image);
jsonObject.put("type", verify_type);
jsonObject.put("token", Token);
String resp = Requests.post(CustomUrl).headers(headers).jsonBody(jsonObject).send().readToText();
System.out.println(resp);
return resp;
}
public String googleVerify(String googlekey, String pageurl) throws InterruptedException {
//# googleVerify
String data = null;
JSONObject jsonObject = new JSONObject();
jsonObject.put("token", Token);
jsonObject.put("type", "40010"); // v2
// jsonObject.put("type", "40011");// v3
jsonObject.put("googlekey", googlekey);
jsonObject.put("pageurl", pageurl);
jsonObject.put("enterprise", 0);
jsonObject.put("invisible", 1);
jsonObject.put("data-s", ""); //## V2+企业如果能找到,找不到传空字符串
jsonObject.put("action", ""); //#V3必传
jsonObject.put("min_score", ""); //#V3才支持的可选参数
String jsonData;
jsonData = Requests.post(CustomUrl).headers(headers).jsonBody(jsonObject).send().readToText();
System.out.println(jsonData);
// # {'msg': '识别成功', 'code': 10000, 'data': {'code': 0, 'captchaId': '51436618130', 'recordId': '74892'}}
// jsonData = "["+"{'msg': '识别成功', 'code': 10000, 'data': {'code': 0, 'captchaId': '51436618130', 'recordId': '74892'}}"+"]";
jsonData = "[" + "{'msg': '识别成功', 'code': 10000, 'data': {'code': 0, 'captchaId': '51436618130', 'recordId': '74892'}}" + "]";
JSONArray jsonArray = new JSONArray(jsonData);
jsonData = "[" + jsonArray.getJSONObject(0).getObj("data") + "]";
JSONArray jsonArray1 = new JSONArray(jsonData);
String captchaId = (String) jsonArray1.getJSONObject(0).getObj("captchaId");
String recordId = (String) jsonArray1.getJSONObject(0).getObj("recordId");
System.out.println(captchaId);
System.out.println(recordId);
int times = 0;
int is_solved = 0;
while (times < 120 || is_solved == 0) {
String url = "http://api.jfbym.com/api/YmServer/funnelApiResult";
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("token", Token);
jsonObject1.put("captchaId", captchaId);
jsonObject1.put("recordId", recordId);
String readToText = Requests.post(url).headers(headers).jsonBody(jsonObject).send().readToText();
// String readToText = "{'msg': '请求成功', 'code': 10001, 'data': {'data': '03AGdBq2611GTOg'}}";
if (readToText.contains("结果准备中,请稍后再试")) {
times += 5;
Thread.sleep(5000);
continue;
}
if (readToText.contains("请求成功")) {
JSONArray jsonArray2 = new JSONArray("[" + readToText + "]");
jsonData = "[" + jsonArray2.getJSONObject(0).getObj("data") + "]";
data = (String) new JSONArray(jsonData).getJSONObject(0).getObj("data");
is_solved = 1;
System.out.println(data);
break;
}
}
return data;
}
public String HcaptchaVerify(String site_key, String site_url) {
//# Hcaptcha
//# 请保证购买相应服务后请求对应 verify_type
//# verify_type="50001"
String verify_type;
verify_type = "50001";
JSONObject jsonObject = new JSONObject();
jsonObject.put("site_key", site_key);
jsonObject.put("site_url", site_url);
jsonObject.put("type", verify_type);
jsonObject.put("token", Token);
String resp = Requests.post(CustomUrl).headers(headers).jsonBody(jsonObject).send().readToText();
System.out.println(resp);
return resp;
}
public String FunCaptchaVerify(String site_key, String site_url) {
//# Hcaptcha
//# 请保证购买相应服务后请求对应 verify_type
//# verify_type="40007"
String verify_type;
verify_type = "40007";
JSONObject jsonObject = new JSONObject();
jsonObject.put("publickey", site_key);
jsonObject.put("pageurl", site_url);
jsonObject.put("type", verify_type);
jsonObject.put("token", Token);
String resp = Requests.post(CustomUrl).headers(headers).jsonBody(jsonObject).send().readToText();
System.out.println(resp);
return resp;
}
public static String ImageToBase64ByOnline(String imgURL) {
ByteArrayOutputStream data = new ByteArrayOutputStream();
try {
// 创建URL
URL url = new URL(imgURL);
byte[] by = new byte[1024];
// 创建链接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
InputStream is = conn.getInputStream();
// 将内容读取内存中
int len = -1;
while ((len = is.read(by)) != -1) {
data.write(by, 0, len);
}
// 关闭流
is.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data.toByteArray());
}
}
class YdmVerifyTest {
public static void main(String[] args) throws IOException, InterruptedException {
YdmVerify ydmVerify = new YdmVerify();
String image_content = YdmVerify.ImageToBase64ByOnline("http://www.78gk.com/haoma/MTczMTM4NDI0MTE=");
ydmVerify.commonVerify(image_content);
}
};
package main
import (
"bytes"
"encoding/base64"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
)
const CustomUrl = "http://api.jfbym.com/api/YmServer/customApi"
const Token = ""
func commonVerify(image string) string {
//# 数英汉字类型
//# 通用数英1-4位 10110
//# 通用数英5-8位 10111
//# 通用数英9~11位 10112
//# 通用数英12位及以上 10113
//# 通用数英1~6位plus 10103
//# 定制-数英5位~qcs 9001
//# 定制-纯数字4位 193
//# 中文类型
//# 通用中文字符1~2位 10114
//# 通用中文字符 3~5位 10115
//# 通用中文字符6~8位 10116
//# 通用中文字符9位及以上 10117
//# 定制-XX西游苦行中文字符 10107
//# 计算类型
//# 通用数字计算题 50100
//# 通用中文计算题 50101
//# 定制-计算题 cni 452
config := map[string]interface{}{}
config["image"] = image
config["type"] = "10110"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
return string(data)
}
func slideVerify(slideImage string, backgroundImage string) string {
//# 滑块类型
//# 通用双图滑块 20111
// # slide_image 需要识别图片的小图片的base64字符串
// # background_image 需要识别图片的背景图片的base64字符串(背景图需还原)
config := map[string]interface{}{}
config["slide_image"] = slideImage
config["background_image"] = backgroundImage
config["type"] = "20111"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
return string(data)
}
func sinSlideVerify(image string) string {
//# 滑块类型
//# 通用单图滑块(截图) 20110
config := map[string]interface{}{}
config["image"] = image
config["type"] = "20110"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
return string(data)
}
func trafficSlideVerify(seed string, data string, href string) string {
//# 滑块类型
//# 定制-滑块协议slide_traffic 900010
config := map[string]interface{}{}
config["seed"] = seed
config["data"] = data
config["href"] = href
config["type"] = "900010"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
_data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(_data), err)
return string(data)
}
func clickVerify(image string, extra interface{}) string {
//# 通用任意点选1~4个坐标 30009
//# 通用文字点选1(extra,点选文字逗号隔开,原图) 30100
//# 定制-文字点选2(extra="click",原图) 30103
//# 定制-单图文字点选 30102
//# 定制-图标点选1(原图) 30104
//# 定制-图标点选2(原图,extra="icon") 30105
//# 定制-语序点选1(原图,extra="phrase") 30106
//# 定制-语序点选2(原图) 30107
//# 定制-空间推理点选1(原图,extra="请点击xxx") 30109
//# 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110
//# 定制-tx空间点选(extra="请点击侧对着你的字母") 50009
//# 定制-tt_空间点选 30101
//# 定制-推理拼图1(原图,extra="交换2个图块") 30108
//# 定制-xy4九宫格点选(原图,label_image,image) 30008
// # 定制-文字点选3(extra="je4_click") 30112
//# 定制-图标点选3(extra="je4_icon") 30113
//# 定制-语序点选3(extra="je4_phrase") 30114
//# 如有其他未知类型,请联系我们
config := map[string]interface{}{}
config["image"] = image
if extra != nil {
config["extra"] = extra
}
config["type"] = "30100"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
return string(data)
}
func rotate(image string) string {
// # 定制-X度单图旋转 90007
config := map[string]interface{}{}
//# 定制-Tt双图旋转,2张图,内圈图,外圈图 90004
//config["out_ring_image"] = image
//config["inner_circle_image"] = image
//config["type"] = "90004"
config["image"] = image
config["type"] = "90007"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
return string(data)
}
type Result struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data Data `json:"data"`
}
type Data struct {
Code int `json:"code"`
CaptchaId string `json:"captchaId"`
RecordId string `json:"recordId"`
Data string `json:"data"`
}
func googleVerify(googlekey string, pageurl string) string {
config := map[string]interface{}{}
//第一步,创建验证码任务
//:param
//:return taskId : string 创建成功的任务ID
url1 := "http://api.jfbym.com/api/YmServer/funnelApi"
config["token"] = Token
config["type"] = "40010" // v2
//config["type"] = "40011" // v3
config["googlekey"] = googlekey
config["pageurl"] = pageurl
config["enterprise"] = 0 //是否为企业版
config["invisible"] = 0 //是否为可见类型
config["data-s"] = "" //## V2+企业如果能找到,找不到传空字符串
//config["action"] = "" //## #V3必传
//config["min_score"] = "0.8" //#V3才支持的可选参数
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(url1, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
//data := `{"msg": "识别成功", "code": 10000, "data": {"code": 0, "captchaId": "51436618130", "recordId": "74892"}}`
fmt.Println(data)
var res Result
_ = json.Unmarshal([]byte(data), &res)
captchaId := res.Data.CaptchaId
recordId := res.Data.RecordId
config1 := map[string]interface{}{}
timeOut := 120
times := 0
for {
if times > timeOut {
fmt.Println("超时")
break
}
url2 := "http://api.jfbym.com/api/YmServer/funnelApiResult"
config1["token"] = Token
config1["captchaId"] = captchaId
config1["recordId"] = recordId
configData, _ := json.Marshal(config1)
body := bytes.NewBuffer([]byte(configData))
resp, _ := http.Post(url2, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
//data := `{"msg": "请求成功", "code": 10001, "data": {"data": "03AGdBq2611GTOgA2v9HUpMMEUE70p6dwOtYyHJQK4xhdKF0Y8ouSGsFZt647SpJvZ22qinYrm6"}}`
fmt.Println(data)
var res Result
_ = json.Unmarshal([]byte(data), &res)
if res.Code != 10001 {
continue
time.Sleep(time.Duration(5) * time.Second)
times += 5
}
return res.Data.Data
}
return string(data)
}
func hcaptchaVerify(siteKey string, siteUrl string) string {
//# Hcaptcha
//# 请保证购买相应服务后请求对应 verify_type
//# verify_type="50001"
config := map[string]interface{}{}
config["site_key"] = siteKey
config["site_url"] = siteUrl
config["type"] = "50001"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
return string(data)
}
func funCaptchaVerify(siteKey string, siteUrl string) string {
//# Hcaptcha
//# 请保证购买相应服务后请求对应 verify_type
//# verify_type="40007"
config := map[string]interface{}{}
config["publickey"] = siteKey
config["pageurl"] = siteUrl
config["type"] = "40007"
config["token"] = Token
configData, _ := json.Marshal(config)
body := bytes.NewBuffer([]byte(configData))
resp, err := http.Post(CustomUrl, "application/json;charset=utf-8", body)
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data), err)
return string(data)
}
func main() {
// 作者水平有限,各位使用者在调用过程中自行修改
resp, _ := http.Get("https://www.78gk.com/haoma/MTc2NjUxMDk4NTg=")
body, _ := ioutil.ReadAll(resp.Body)
b64Str := base64.StdEncoding.EncodeToString([]byte(body))
commonVerify(b64Str)
fmt.Println(b64Str)
}
//数英汉字识别类型 对于参量里的type 参数,请使用者自行修改对应类型
// # 数英汉字类型
// # 通用数英1-4位 10110
// # 通用数英5-8位 10111
// # 通用数英9~11位 10112
// # 通用数英12位及以上 10113
// # 通用数英1~6位plus 10103 该类型识别率较高
// # 定制-数英5位~qcs 9001
// # 定制-纯数字4位 193
// # 中文类型
// # 通用中文字符1~2位 10114
// # 通用中文字符 3~5位 10115
// # 通用中文字符6~8位 10116
// # 通用中文字符9位及以上 10117
// # 定制-XX西游苦行中文字符 10107
// # 计算类型
// # 通用数字计算题 50100
// # 通用中文计算题 50101
// ## 定制-计算题 cni 452
// # 通用任意点选1~4个坐标 30009, 具体参数需要根据具体类型修改,点选具体类型某些需要 extra参数,请使用者自行修改对应类型
// # # 通用文字点选1(extra,点选文字逗号隔开,原图) 30100
// # # 定制-文字点选2(extra="click",原图) 30103
// # # 定制-单图文字点选 30102
// # # 定制-图标点选1(原图) 30104
// # # 定制-图标点选2(原图,extra="icon") 30105
// # # 定制-语序点选1(原图,extra="phrase") 30106
// # # 定制-语序点选2(原图) 30107
// # # 定制-空间推理点选1(原图,extra="请点击xxx") 30109
// # # 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110
// # # 定制-tx空间点选(extra="请点击侧对着你的字母") 50009
// # # 定制-tt_空间点选 30101
// # # 定制-推理拼图1(原图,extra="交换2个图块") 30108
// # # 定制-xy4九宫格点选(原图,label_image,image) 30008
// 使用前 先导入图灵插件 按键精灵软件 最上面有个叫资源库的,里面的插件图灵插件 然后再把神梦http插件安装上,
// 把下方链接下载下来的ddl文件复制到 按键精灵安装的地方的的下面的plugin 例如(D:\Program Files (x86)\按键精灵\按键精灵2014\plugin) 文件里
//(链接: https://pan.baidu.com/s/1QIKjtitqP9Gycws0W-gcsw?pwd=yunm 提取码: yunm 复制这段内容后打开百度网盘手机App,操作更方便哦)
Function UrlEncode(url)
encode = ""
For i = 1 To Len(url)
char = Mid(url, i, 1)
asci = Asc(char)
If (asci >= 48 and asci <= 57) or (asci >= 65 and asci <= 90) or (asci >= 97 and asci <= 122) Then
encode = encode & char
ElseIf asci = 32 Then
encode = encode & "+"
Else
encode = encode & "%" & Hex(asci)
End If
Next
UrlEncode = encode
End Function
token="云码用户中心token"
img_base64 = Plugin.TURING.Image_Base64Encode("C:\Users\xxx\Desktop\2eeb2db57b39d19d4c8c5e82705367e8.png") // 图片地址需要改
img_base64 = Replace(img_base64, "%", "%25")
img_base64 = Replace(img_base64, "+", "%2B")
img_base64 = Replace(img_base64, " ", "%20")
img_base64 = Replace(img_base64, "/", "%2F")
img_base64 = Replace(img_base64, "?", "%3F")
img_base64 = Replace(img_base64, "#", "%23")
img_base64 = Replace(img_base64, "&", "%26")
img_base64 = Replace(img_base64, "=", "%3D")
TracePrint img_base64
Param = "&image=" & img_base64 & "&token=" & UrlEncode(token) & "&type=使用类型id 需要改"
TracePrint Param
返回结果json = Plugin.SMWH.WinHttp("http://api.jfbym.com/api/YmServer/customApi", 1, param ,"" ,"" ,"","Content-Type: application/json; charset=UTF-8","","","","","","","UTF-8")
TracePrint 返回结果json
result = Plugin.SMWH.GetJSON(返回结果json, "data.data")
TracePrint result
【 // # 数英汉字类型】】
【 // # 通用数英1-4位 10110】
【 // # 通用数英5-8位 10111】
【 // # 通用数英9~11位 10112】
【 // # 通用数英12位及以上 10113】
【 // # 通用数英1~6位plus 10103 该类型识别率较高】
【 // # 定制-数英5位~qcs 9001】
【 // # 定制-纯数字4位 193】
【 // # 中文类型】
【 // # 通用中文字符1~2位 10114】
【 // # 通用中文字符 3~5位 10115】
【 // # 通用中文字符6~8位 10116】
【 // # 通用中文字符9位及以上 10117】
【 // # 定制-XX西游苦行中文字符 10107】
【 // # 计算类型】
【 // # 通用数字计算题 50100】
【 // # 通用中文计算题 50101】
【 // ## 定制-计算题 cni 452】
【 // # 通用任意点选1~4个坐标 30009, 具体参数需要根据具体类型修改,点选具体类型某些需要 extra参数,请使用者自行修改对应类型】
【 // # # 通用文字点选1(extra,点选文字逗号隔开,原图) 30100】
【 // # # 定制-文字点选2(extra="click",原图) 30103】
【 // # # 定制-单图文字点选 30102】
【 // # # 定制-图标点选1(原图) 30104】
【 // # # 定制-图标点选2(原图,extra="icon") 30105】
【 // # # 定制-语序点选1(原图,extra="phrase") 30106】
【 // # # 定制-语序点选2(原图) 30107】
【 // # # 定制-空间推理点选1(原图,extra="请点击xxx") 30109】
【 // # # 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110】
【 // # # 定制-tx空间点选(extra="请点击侧对着你的字母") 50009】
【 // # # 定制-tt_空间点选 30101】
【 // # # 定制-推理拼图1(原图,extra="交换2个图块") 30108】
【 // # # 定制-xy4九宫格点选(原图,label_image,image) 30008】
【 // # # 点选二字TX 30111】
【 代码例子下载地址: 链接: 】
【 https://pan.baidu.com/s/1EfsgCPv-EpNuiuPV58gSCA?pwd=yunm 提取码: yunm 复制这段内容后打开百度网盘手机App,操作更方便哦】
.版本 2
.支持库 spec
.程序集 窗口程序集_启动窗口
.子程序 _按钮1_被单击
网页_发包 ()
.子程序 网页_发包, , , 本子程序由【YZYZ-菜鸟编程小助手】生成
.局部变量 局_地址, 文本型, , , 调用精易模块 http://ec.125.la/
.局部变量 局_提交, 文本型
.局部变量 局_返回, 文本型
.局部变量 token, 文本型
.局部变量 type, 文本型
.局部变量 image, 文本型
token = “用户中心token”
type = “识别类型id”
image = 编码_BASE64编码 (读入文件 (取运行目录 () + “\” + “1.png”))
局_地址 = “http://api.jfbym.com/api/YmServer/customApi”
局_提交 = “{” + #引号 + “token” + #引号 + “: ” + #引号 + token + #引号 + “,” + #引号 + “type” + #引号 + “: ” + #引号 + type + #引号 + “,” + #引号 + “image” + #引号 + “: ” + #引号 + image + #引号 + “}”
调试输出 (image)
局_返回 = 编码_Utf8到Ansi (网页_访问_对象 (局_地址, 1, 局_提交, , , “Content-Type: application/json;charset=utf-8”, , , , , , , , , , , ))
调试输出 (局_返回)
// RestSharp 用法不了解的请百度 RestSharp教程
var client = new RestClient("http://api.jfbym.com/api/YmServer/customApi");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("token", "用户中心token");
request.AddParameter("image", "图片的base64(注意不含:data:image/jpg;base64,直接图片base64编码)");
//识别类型
//数英汉字识别类型 对于参量里的type 参数,请使用者自行修改对应类型
// # 数英汉字类型
// # 通用数英1-4位 10110
// # 通用数英5-8位 10111
// # 通用数英9~11位 10112
// # 通用数英12位及以上 10113
// # 通用数英1~6位plus 10103 该类型识别率较高
// # 定制-数英5位~qcs 9001
// # 定制-纯数字4位 193
// # 中文类型
// # 通用中文字符1~2位 10114
// # 通用中文字符 3~5位 10115
// # 通用中文字符6~8位 10116
// # 通用中文字符9位及以上 10117
// # 定制-XX西游苦行中文字符 10107
// # 计算类型
// # 通用数字计算题 50100
// # 通用中文计算题 50101
// ## 定制-计算题 cni 452
// # 通用任意点选1~4个坐标 30009, 具体参数需要根据具体类型修改,点选具体类型某些需要 extra参数,请使用者自行修改对应类型
// # # 通用文字点选1(extra,点选文字逗号隔开,原图) 30100
// # # 定制-文字点选2(extra="click",原图) 30103
// # # 定制-单图文字点选 30102
// # # 定制-图标点选1(原图) 30104
// # # 定制-图标点选2(原图,extra="icon") 30105
// # # 定制-语序点选1(原图,extra="phrase") 30106
// # # 定制-语序点选2(原图) 30107
// # # 定制-空间推理点选1(原图,extra="请点击xxx") 30109
// # # 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110
// # # 定制-tx空间点选(extra="请点击侧对着你的字母") 50009
// # # 定制-tt_空间点选 30101
// # # 定制-推理拼图1(原图,extra="交换2个图块") 30108
// # # 定制-xy4九宫格点选(原图,label_image,image) 30008
request.AddParameter("type", "10110");
//其他参数根据需要从 http 接口文档中添加
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
curl --location --request POST 'http://api.jfbym.com/api/YmServer/customApi' \
--header 'Content-Type: application/json' \
--data-raw '{"token": "用户中心密钥","type": "识别类型","image": "图片base64字符串"}'
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, "http://api.jfbym.com/api/YmServer/verifyapi");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
const char *data = "{\"token\": \"用户中心密钥\",\"type\": \"识别类型code\",\"image\": \"图片base64字符串\"}";
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);
var axios = require('axios');
//识别类型
//数英汉字识别类型 对于参量里的type 参数,请使用者自行修改对应类型
// # 数英汉字类型
// # 通用数英1-4位 10110
// # 通用数英5-8位 10111
// # 通用数英9~11位 10112
// # 通用数英12位及以上 10113
// # 通用数英1~6位plus 10103 该类型识别率较高
// # 定制-数英5位~qcs 9001
// # 定制-纯数字4位 193
// # 中文类型
// # 通用中文字符1~2位 10114
// # 通用中文字符 3~5位 10115
// # 通用中文字符6~8位 10116
// # 通用中文字符9位及以上 10117
// # 定制-XX西游苦行中文字符 10107
// # 计算类型
// # 通用数字计算题 50100
// # 通用中文计算题 50101
// ## 定制-计算题 cni 452
// # 通用任意点选1~4个坐标 30009, 具体参数需要根据具体类型修改,点选具体类型某些需要 extra参数,请使用者自行修改对应类型
// # # 通用文字点选1(extra,点选文字逗号隔开,原图) 30100
// # # 定制-文字点选2(extra="click",原图) 30103
// # # 定制-单图文字点选 30102
// # # 定制-图标点选1(原图) 30104
// # # 定制-图标点选2(原图,extra="icon") 30105
// # # 定制-语序点选1(原图,extra="phrase") 30106
// # # 定制-语序点选2(原图) 30107
// # # 定制-空间推理点选1(原图,extra="请点击xxx") 30109
// # # 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110
// # # 定制-tx空间点选(extra="请点击侧对着你的字母") 50009
// # # 定制-tt_空间点选 30101
// # # 定制-推理拼图1(原图,extra="交换2个图块") 30108
// # # 定制-xy4九宫格点选(原图,label_image,image) 30008
var data = JSON.stringify({
"token": "用户中心密钥",
"type": "识别类型code",
"image": "图片base64字符串"
});
var config = {
method: 'post',
url: 'http://api.jfbym.com/api/YmServer/customApi',
headers: {
'Content-Type': 'application/json'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
//请自行测试更改
// SHTTP.lua 山海师http双端插件 玩按键精灵的都知道吧,
//这个插件地址 http://bbs.anjian.com/showtopic.aspx?topicid=697539&forumpage=1&onlyauthor=1&posterid=742060
// 或 链接: https://pan.baidu.com/s/1fvWC1GAXRCsCn1D6B6V4jg?pwd=jppw 提取码:jppw
Import "SHTTP.lua"
Import "ShanHai.lua"
Import "Cjson.lua"
//用户中心token
Dim token = ""
//识别类型
//数英汉字识别类型 对于参量里的type 参数,请使用者自行修改对应类型
// # 数英汉字类型
// # 通用数英1-4位 10110
// # 通用数英5-8位 10111
// # 通用数英9~11位 10112
// # 通用数英12位及以上 10113
// # 通用数英1~6位plus 10103 该类型识别率较高
// # 定制-数英5位~qcs 9001
// # 定制-纯数字4位 193
// # 中文类型
// # 通用中文字符1~2位 10114
// # 通用中文字符 3~5位 10115
// # 通用中文字符6~8位 10116
// # 通用中文字符9位及以上 10117
// # 定制-XX西游苦行中文字符 10107
// # 计算类型
// # 通用数字计算题 50100
// # 通用中文计算题 50101
// ## 定制-计算题 cni 452
// # 通用任意点选1~4个坐标 30009, 具体参数需要根据具体类型修改,点选具体类型某些需要 extra参数,请使用者自行修改对应类型
// # # 通用文字点选1(extra,点选文字逗号隔开,原图) 30100
// # # 定制-文字点选2(extra="click",原图) 30103
// # # 定制-单图文字点选 30102
// # # 定制-图标点选1(原图) 30104
// # # 定制-图标点选2(原图,extra="icon") 30105
// # # 定制-语序点选1(原图,extra="phrase") 30106
// # # 定制-语序点选2(原图) 30107
// # # 定制-空间推理点选1(原图,extra="请点击xxx") 30109
// # # 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110
// # # 定制-tx空间点选(extra="请点击侧对着你的字母") 50009
// # # 定制-tt_空间点选 30101
// # # 定制-推理拼图1(原图,extra="交换2个图块") 30108
// # # 定制-xy4九宫格点选(原图,label_image,image) 30008
Dim type = "10110"
Dim sUrl = "http://api.jfbym.com/api/YmServer/customApi"
Dim sJson, tJson,res,img_base64
Dim filePath = "/Pictures/111.png"
// 需要先将图片转成base64编码
TracePrint GetSdcardDir()
img_base64 = ShanHai.ReadFileBase(GetSdcardDir() & filePath)
TracePrint img_base64
//base64 出来的类似这种
//img_base64 = "/9j/2wCEACgcHiMeGSgjISMtKygwPGRBPDc3PHtYXUlkkYCZlo+AjIqgtObDoKrarYqMyP/L2u71////m8H////6/+b9//gBKy0tPDU8dkFBdviljKX4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+P/AABEIACsA+gMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/ANmiiigAooyNxXIyBkiigAoqtc3LxyJDCm+VxnBOAB6mi3uXaZoJ4wkoG4YOQw9qALNFFFABRRRQAUUUZGQM8mgAooooAKz9OsJrS4lkkmDhxjjPzc9T7/41oUUAFFFFABRVeK5M106RqDEgwz+/oKsUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFADBDGszShAJGGC2OSKfRRQBTh51W4J6qigfSi441OzI6kOD9MUXCyQXYuY4zIrLtdV6+xpIFluLv7TJGY1VdqK3X3NAF2ioUuUad4SQrqcBSwyeM9P8/nkCagAooooARyyoSq7mA4GetZclzMdQhZrVwUVvlDA5zWrUZgU3InydwXbjtQAsMhkjDFGQns3Wn0UUAFFFFABVW9lfKW8P+skzz6CrVVbqKUTx3EKhmQEFScZFAEUBlsTFDKFMbnaHXsfersj7FzsZhnnbzgev/wCqqZE93LHviMUaNuO48k1eoAjS4idggbDnorAqx/A81JQQGGCARnPNNjkjlXdG6uM4ypzQA6iiigCo9xcu5SC3xg43yHA/Kp4BIqYmdXfrwMVHPDPM+FuDHHjoo5/Olt7SK3JZMlm6sxyTQA+QzBv3ccbDHVnI/oab5s6/ft93p5bg/nnFTUUAQ+fJ/wA+s35p/wDFUefJ/wA+s35p/wDFVNRQBD9qj/uzf9+X/wAKPtUf92b/AL8v/hU1FABRRRQAUUUUAFFFFACOiyKVdQynqCMilUBVCqAABgAdqKKACiiigAooooAKKKKACiiigAooooAKKKKAGyxiWJ42yA6lTj3qrp9gLFX/AHhcuRk4x0//AF1cooAKKKKAI5JljbDCQnGfljZv5Cm/ao/7s3/fl/8ACpqKAIftUf8Adm/78v8A4Ufao/7s3/fl/wDCpqKAIftUf92b/vy/+FTKdygjOCM8jFFFABRRRQB//9k="
// replace special word in img_base64
img_base64 = Replace(img_base64, "%", "%25")
img_base64 = Replace(img_base64, "+", "%2B")
img_base64 = Replace(img_base64, " ", "%20")
img_base64 = Replace(img_base64, "/", "%2F")
img_base64 = Replace(img_base64, "?", "%3F")
img_base64 = Replace(img_base64, "#", "%23")
img_base64 = Replace(img_base64, "&", "%26")
img_base64 = Replace(img_base64, "=", "%3D")
token = Replace(token, "%", "%25")
token = Replace(token, "+", "%2B")
token = Replace(token, " ", "%20")
token = Replace(token, "/", "%2F")
token = Replace(token, "?", "%3F")
token = Replace(token, "#", "%23")
token = Replace(token, "&", "%26")
token = Replace(token, "=", "%3D")
Dim tData = {null}
tData["token"] = token
tData["type"] = type
tData["image"] = img_base64
res = SHTTP.Post(sUrl,tData,{"headers":{"Content-Type":"application/x-www-form-urlencoded"}})
TracePrint res
// 如果报错,请看 https://blog.csdn.net/qq_40081339/article/details/104762948
tJson = Cjson.Decode(res)
TracePrint tJson
//注意:部分接口支持报错返分,请不要乱报错,后台人员会核对,如乱报错,可能会冻结账号;uniqueCode 识别请求返回参数
//uniqueCode = Replace(uniqueCode, "%", "%25")
//uniqueCode = Replace(uniqueCode, "+", "%2B")
//uniqueCode = Replace(uniqueCode, " ", "%20")
//uniqueCode = Replace(uniqueCode, "/", "%2F")
//uniqueCode = Replace(uniqueCode, "?", "%3F")
//uniqueCode = Replace(uniqueCode, "#", "%23")
//uniqueCode = Replace(uniqueCode, "&", "%26")
//uniqueCode = Replace(uniqueCode, "=", "%3D")
//Dim rData = {null}
//Dim rUrl = "http://api.jfbym.com/api/YmServer/refundApi"
//rData["token"] = token
//rData["uniqueCode"] = uniqueCode
//res = SHTTP.Post(rUrl,rData,{"headers":{"Content-Type":"application/x-www-form-urlencoded"}})
//TracePrint res
//tJson = Cjson.Decode(sJson)
//TracePrint tJson
if (!requestScreenCapture()) {
console.show()
toastLog("请求截图失败");
exit();
} else {
toastLog("请求截图成功");
}
captureScreen("/storage/emulated/0/Pictures/1.png");
var clip = images.clip(images.read("/storage/emulated/0/Pictures/1.png"), 10, 102, 529 - 10, 618 - 180);
let res = http.post("http://api.jfbym.com/api/YmServer/customApi", {
'image': images.toBase64(clip),
'token': '用户中心token',
'type': '识别类型id',
});
let html = res.body.string();//取页面html源码
console.log(html);
res_data = html.split('data":"')[1].split('","time')[0]
log(res_data)
function base64Decode(str) {
//base64解码字符集
var _base64DecodeChars = [
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1
];
var c1, c2, c3, c4;
var i, len, out;
len = str.length;
i = 0;
out = "";
while (i < len) {
/* c1 */
do {
c1 = _base64DecodeChars[str.charCodeAt(i++) & 0xff];
}
while (i < len && c1 == -1);
if (c1 == -1)
break;
/* c2 */
do {
c2 = _base64DecodeChars[str.charCodeAt(i++) & 0xff];
}
while (i < len && c2 == -1);
if (c2 == -1)
break;
out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
/* c3 */
do {
c3 = str.charCodeAt(i++) & 0xff;
if (c3 == 61)
return out;
c3 = _base64DecodeChars[c3];
}
while (i < len && c3 == -1);
if (c3 == -1)
break;
out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
/* c4 */
do {
c4 = str.charCodeAt(i++) & 0xff;
if (c4 == 61)
return out;
c4 = _base64DecodeChars[c4];
}
while (i < len && c4 == -1);
if (c4 == -1)
break;
out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
}
// return out; // 会中文乱码
return decodeURIComponent(escape(out)); // 解决中文乱码
}};
//识别类型
//数英汉字识别类型 对于参量里的type 参数,请使用者自行修改对应类型
// # 数英汉字类型
// # 通用数英1-4位 10110
// # 通用数英5-8位 10111
// # 通用数英9~11位 10112
// # 通用数英12位及以上 10113
// # 通用数英1~6位plus 10103 该类型识别率较高
// # 定制-数英5位~qcs 9001
// # 定制-纯数字4位 193
// # 中文类型
// # 通用中文字符1~2位 10114
// # 通用中文字符 3~5位 10115
// # 通用中文字符6~8位 10116
// # 通用中文字符9位及以上 10117
// # 定制-XX西游苦行中文字符 10107
// # 计算类型
// # 通用数字计算题 50100
// # 通用中文计算题 50101
// ## 定制-计算题 cni 452
// # 通用任意点选1~4个坐标 30009, 具体参数需要根据具体类型修改,点选具体类型某些需要 extra参数,请使用者自行修改对应类型
// # # 通用文字点选1(extra,点选文字逗号隔开,原图) 30100
// # # 定制-文字点选2(extra="click",原图) 30103
// # # 定制-单图文字点选 30102
// # # 定制-图标点选1(原图) 30104
// # # 定制-图标点选2(原图,extra="icon") 30105
// # # 定制-语序点选1(原图,extra="phrase") 30106
// # # 定制-语序点选2(原图) 30107
// # # 定制-空间推理点选1(原图,extra="请点击xxx") 30109
// # # 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110
// # # 定制-tx空间点选(extra="请点击侧对着你的字母") 50009
// # # 定制-tt_空间点选 30101
// # # 定制-推理拼图1(原图,extra="交换2个图块") 30108
// # # 定制-xy4九宫格点选(原图,label_image,image) 30008
功能 接口上传()
变量 图片 = base64encodefile("C:\\2.jpg")//图片路径,需要改成自己的路径
变量 token = "请输入自己的token"
变量 识别类型 = "识别类型id"
变量 send_data = "{\"token\":\"" & token & "\",\"type\":\"" & 识别类型 & "\",\"image\":\"" & 图片 & "\"}"
变量 header = array("Content-Type" = "application/json")
变量 请求返回 = http提交请求("post", "http://api.jfbym.com/api/YmServer/customApi", send_data, "utf-8", header)
调试输出(请求返回)
if(字符串查找(请求返回, "识别成功") > 0)
请求返回 = 转字符型(请求返回)
变量 计算_1 = 字符串查找(请求返回, "data")
计算_1 = 字符串截取(请求返回, 计算_1 + 4, 字符串长度(请求返回))
变量 计算_2 = 字符串查找(计算_1, "data")
变量 计算_3 = 字符串查找(计算_1, "time")
变量 识别结果 = 字符串截取(计算_1, 计算_2 + 4, 计算_3 - 3)
traceprint("识别结果 " & 识别结果)
end
结束
function main(){
var url = "http://api.jfbym.com/api/YmServer/customApi";
var token=xxx; //用户中心密钥
var type=10110;//根据开发文档进行修改
var autoimg = image.captureScreen(3,0,0,300,400);//截图
var imageBase64=image.toBase64(autoimg);//图片转base64
//图片要回收
image.recycle(autoimg);
//下面是基本参数,需要其他参数的根据文档模仿添加
var pa = {"token":token,"type":type,"image":imageBase64};
var x = http.postJSON(url, pa, 100 * 1000, null);
toast(" x返回数据-> " + x)
var jsonResult = JSON.parse(JSON.stringify(x));
if(jsonResult.code==10000){
toast(" data-> " + jsonResult.data.data);//识别结果
toast(" unique_code-> " + jsonResult.data.unique_code);//用于报错
}else{
toast(" msg-> " + jsonResult.msg);//错误原因
}
}
main();
function main(){
var url = "http://api.jfbym.com/api/YmServer/customApi";
var token=xxx; //用户中心密钥
var type=10110;//根据开发文档进行修改
var autoimg = image.captureScreen(3,0,0,300,400);//截图
var imageBase64=image.toBase64(autoimg);//图片转base64
//图片要回收
image.recycle(autoimg);
//下面是基本参数,需要其他参数的根据文档模仿添加
var pa = {"token":token,"type":type,"image":imageBase64};
var x = http.postJSON(url, pa, 100 * 1000, null);
toast(" x返回数据-> " + x)
var jsonResult = JSON.parse(x);
if(jsonResult.code==10000){
toast(" data-> " + jsonResult.data.data);//识别结果
toast(" unique_code-> " + jsonResult.data.unique_code);//用于报错
}else{
toast(" msg-> " + jsonResult.msg);//错误原因
}
}
main();
--url = url地址
--path = 图片路径
--token = 密匙
--type = 图片类型id
function 图片识别(path)
import('java.lang.*')
import('java.util.*')
import('com.nx.assist.lua.LuaEngine')
local url="http://api.jfbym.com/api/YmServer/customApi"
local path = "/sdcard/Pictures/2.png" --图片路径
local token = "" --云码用户中心token
local type = "10110" --图片类型id
local base64 = getFileBase64(path)
print("base64:" .. base64 )
local params = {}
params["image"] = base64
params["token"] = token
params["type"] = type
local headers = {}
headers["User-Agent"]
= "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3"
local postRet = LuaEngine.httpPost(url,params,headers,60)
if postRet ~= nil then
local json = jsonLib.decode(postRet)
if json["msg"] == "识别成功" then
return json["data"]["data"]
end
end
end
print("验证码:" .. 图片识别(path) )
function 云码(imagePath)
local url="http://api.jfbym.com/api/YmServer/customApi" --接口地址
local token = "" --云码用户中心token
local type = "20120" --填入需要的图片类型id
local filedata = file.read(imagePath);
local imagebase64 = codec.base64.encode(filedata);
-- string.gsub("abcdabcd","a","z");
imagebase64 = string.gsub( imagebase64,"%%", "%%25");
imagebase64 = string.gsub( imagebase64,"+", "%%2B");
imagebase64 = string.gsub( imagebase64," ", "%%20");
imagebase64 = string.gsub( imagebase64,"/", "%%2F");
imagebase64 = string.gsub( imagebase64,"?", "%%3F");
imagebase64 = string.gsub( imagebase64,"#", "%%23");
imagebase64 = string.gsub( imagebase64,"&", "%%26");
imagebase64 = string.gsub( imagebase64,"=", "%%3D");
local urldata = "image=" .. imagebase64 .. "&token=" .. token .. "&type=" .. type .."&developer_tag=5241a574ed042e07267fd3e493a069ad"
-- logDebug( urldata);
header = {}
header["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8"
data, status = net.http.post(url, header, urldata, 30)
logDebug(data); -- 响应数据
logDebug(status);
end
function main()
云码('/mnt/sdcard/touchelf/scripts/1.png')
end
#######触摸精灵#####