电话咨询
19922193247
类型:通用旋转验证码,返回旋转角度,人工接口,不支持报错;需要自己计算返回旋转角度与对应拉动滑块距离
注意:
1.本接口是纯人工旋转接口,可用于任意单图(截图/原图)转正的角度返回;
2.本接口返回的是转正需要的度数,范围是-180到180(逆时针180到顺时针180度);
3.本接口不支持报错,请慎重使用。
只支持HTTP中的Post方法,同时Content-Type请设置为application/json或者application/x-www-form-urlencoded
跨平台http接口,请仔细查看各类型的http接口,仅支持post传参
http api 接口 文档
1.1.请求地址
http://api.jfbym.com/api/YmServer/customApi
1.2.参数列表
参数名称 | 传值类型 | 说明 | 是否必须 |
---|---|---|---|
image | string | 待识别图的base64编码 | 是 |
token | string | 用户中心Token | 是 |
type | string | 900011 | 是 |
参数名称 | 传值类型 | 说明 |
---|---|---|
code | int | 状态值 |
msg | string | 请求说明 |
data | array | 打码数据 |
--code | int | 打码服务状态 |
--data | string | 识别结果(转正所需度数) |
--time | string | 打码服务时长 |
code | 说明 |
---|---|
10000 | 识别成功 |
10001 | 参数错误 |
10002 | 余额不足 |
10003 | 无此访问权限(未获取到有效token) |
10004 | 无此验证类型(type参数值不对) |
10005 | 网络拥塞 |
10006 | 数据包过载 |
10007 | 图片未识别成功(接口模型无法处理图片参数) |
10008 | 网络错误,请稍后重试 |
10009 | 结果准备中,请稍后再试 |
10010 | 请求结束 |
类型:通用旋转验证码,返回旋转角度,人工接口,不支持报错;需要自己计算返回旋转角度与对应拉动滑块距离
import base64 import requests # www.jfbym.com 注册后登录去用户中心 with open('图片绝对路径/test.png', 'rb') as f: b = base64.b64encode(f.read()).decode() ## 图片二进制流base64字符串 def verify(): url = "http://api.jfbym.com/api/YmServer/customApi" data = { ## 关于参数,一般来说有3个;不同类型id可能有不同的参数个数和参数名,找客服获取 "token": "注册后登录去用户中心获取token", "type": "打码类型id", "image": b, } _headers = { "Content-Type": "application/json" } response = requests.request("POST", url, headers=_headers, json=data).json() print(response) if __name__ == '__main__': verify()
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.jsoup.Jsoup; import java.io.IOException; import java.util.HashMap; import java.util.Map; import sun.misc.BASE64Encoder; public class Test { /** * 图像识别 * @throws IOException * 注意: maven依赖 ** */ public static void main(String[] args) throws IOException { //注册后用户中心找到token填这儿 String token= "用户中心token"; //类型id 产品列表里找自己需要的产品的id,然后改这儿 String typeid= "10110"; // 图片二进制流base64字符串 String image= "iVBORw0KGgoAAAANSUhEUgAAAFQAAAAgCAIAAAADushBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAL8klEQVRYhd1ZaXBU15X+Xm/qdqvVanUjJBAYoc1RAAlpIohtiPESJyAHl4NTGYfYJqkxmYGUUuOEmhkoj1OTyRDGwVQRMsYGxUBB7MKyndgs9sQY2SDbcRAMWhgLCW2WWt1q9b6/5Zsfr1tIosUSk6lyTvWPp3Pv/c757j3n3nOvBJL4q5BIAmf6ZYNOqJmrMehSyonsBEGQZTmZTCqKotPpZFkW/jrIJyXufEfs9VAhKgs1G+/Rq/ru7u5Tp04ZjcZ4PF5TUzN//vwXXnihrKxMkiS32627OujnQpISTncrg15ajIJBA7tV+NAvL83VKoqSSCTq6upkWZZlWRAErVabm5u7ZMmS1tbW2trazz15d5CNp8SxCM1ZgihhVY3WNFc45ZUtCU2BlOju7j579qzD4ZgxY4bJZIpEIn19fc3NzUajsbOz83NP/ky/MuilzSzERcyxCflFmr0u8W9tuveC8oMO0/Lly/v7+9etW/fWW29VVVXZbLZz587FYjGz2exwODKTr6/HkSMZ9A0N2LHjL0vmRqXIJmg1CMSYrReqb9O8EhDrbtF0xBUCBQL2NDWFw+GmpqZgMNjX17dhwwa9Xl9YWFheXt7e3n61la+shMUySTNv3l+UyJ8jC4s0f7dc3+tRqudoi+yC18e5Bk2OTghKBPDII48A0Ol0BoNhZGREEITHH39cq9UCEAQBzCSrVhHg++9nbJxWwmE2NfGJJ7h4Ma1W6vV0OLhsGX/6Uw4P3xjUNcXt5ubNrK5mTg5NJpaWcsMGdnXdGMhNI791Ky0WApl/ZjP37Lkxz64i77zDvLwMVkwmHjp0Azg3jbw6BGBWFpct4/r13LSJ3/kOHY7Lzu3dO2nIpUuXNm/efPvtt9vtdp1OZzabi4uLV69e/eKLL8bj8ekMdXYyO5sALRZu28aODvb2sqmJCxYQoF7P5ubr9flq5Nes4b338q67+NhjPHSIongN8lVV3LOHweAkfSTCRx9Nkc/JoceT0m/bts1gMEyXySUlJa2trRkNfeMbBKjVTl2bYJAVFQRYVUVZ/szkp/yqqtjfPy1QWxsVJXOTLLOuLgXS2EiSzz777DjP6urqLVu27N69+5lnnlm3bp3RaFT1ubm5g4ODU6ACAWq1BPjNb2YwdOhQysqJE9fDfTL5KDlCjpCbf849e9nVxWiUfX1sbGRBQYq/JKU6i+SVoRkjA5nM7NqVcuvJJxkOh81ms8pw586dU3oODQ1VVlaqrRs3bpzSeupUCmfXrgxWnM5U6xXjrkVeIp2kGi9JUprcb3CQNhsBvvzyZZ7+K+CmI3/4cMqtH/6Qx44dU7nV1dVl9OnIvt1qh6qSuUzEJja9+WYK56WX0qqQl64+9VMUU61La2Nsf+8a1MnL53wUMAMaAIB6LZAALwDAABQVYe3j2Pksjr+LFd+CHYgCCUAGbMAYoAAaIBtIAKOAAuQDchrh3P+mrBQXw+12q98VFRUZ0j0auE10qZ9hRQNFntiYk5P68HrTqrAfowPIv3Wi8sLFaXeTiXKZvAxMGaEF8gGkyZSUAoDfhWwgBNwCaAErEAYMgB4IAj5AAQqBCBADTEA+IEk4tA8ABAErV6Kvb6aK39XVNdFcHEgCOQMXPlFSpdWi6sUwmhHy4qM3ACCvsLLyq4IAEs2vOf++shlLV6OvDZ5BhP1YUt+8+2NgKYBAUCM5B3Wjv0Uiinu+i1h4HAE1X71scjwGguTkfZoS6SFHySEySW7+VwJ87DGKpGdC2PvIaDplYqSXlMgIGUojbP73VDQ+/DBJRiKRPLtdtf7cc89NSRnnf7+0oKIMgEajOX36NEnKEqmQ5LsHGY/cdXtUPdI+PjrA8yfpvMTzJ0lG284uLI+Mb8/eo78nyc4W9rVPQRi3ODXn1Q1bJGUyQEZJkm4yFGdZeWqniZB+Mp4mHyJH0xM3nvNBcpgcIpv+QJ2OAPMc7Byim5TJ3xw+rNenrtxVtbVPPvXU9uef/8Uvf/nI975nMmYBsFgsL7/yiot0kf5oiKeb+P5hvr6DPlfLG5/qtApAW67yq3881/vHgZF3W44eZe0XAmqdo5L3f9BCkn1t7PqYkxEykGd6t3/lHT79n3S6GCddpJdsuci77yFAm53dfrpImZTJEXKUVMgh0pkOB5V8mAyRZztotaWO5ZeOpUz4yRh55OTJBQsWXJmHWq32X7799Z6BfoVkcIzxSLitWRm8QJInD9E3wuHug1tasrIyHMZfu9O3di0BajRU2t67TL6tmRMRVIn4M5zzBw4QoCCwpIR1dZwzh4JAgNZcHp2meMqYMn/qZsGsFNTe/akwGU8Zn6KcOHFi0eLFV/I332L6/teW+V/flXj3oCcRGx0dVN7+Df90nMeeV8nzD/suHnzjHx64UF6mmEy0mJJLv+jZ/Zwsnzx8T40T4JxZYmq3V8mPDnIigioXPshAvqeHP/kJly7lzJnU62k2c9EibtrEnk8zH2PMlDLtfZx7a2pBfvVfjJFudbpJPznoct3xla8AyLXZ/mP79p6enmQyOeL3v3niRH19vToFlQsWXBoeJukmkxONDXdPd4zJMq3WaUugqdL6duYK78+Q8QLJTfYPsnh+ivlT2+kknekmF+kLBEpKSgDY8vI+6eoaJd2khwyTYyTJjT/6kcr/vlWrRslPr5v88eOZLxGZJePKf0YZGmJpacqJf/pZqmoKkb50h6efflrltnXr1okDx4+PWCzmcDjUPu0XL04XblNEUbhsGQFarQyHr2NAxpz/LOJ0srw8xXzTlssbgboRiqSLrKqtVYl9cObMCOll6ggYI4fJMVIhv756tdrnxYMH3aSbHCEVUiSdMvujl6dSFUliQ0PK7q9/fb3e3sw3PLcbd98NtXL58Y/xz/8GbbrJCBgBAvmAa2hIVWZbLDrABsSuqJqs6VIuEoloADsQSldNxiDK52LlQ7j7DhTPgyCgowONjTh/HgDWrMEPfnDdHt+sNfd4Ujfq8XvFdFVTSXm5avrNt9+ecgR0h+PN/Z4TA55FdUvVPi+/+qoa9uNVU48v83uJIHD9eg4F4l1j1xP0N3XlH34Y7e0AkJeHnBxs2QICESAbAKAAApAEKspRvXBhT1cXgIP799fddx+AJKADEpLc6wndNcfedrGr48zHKmytbSYGnPB4UXUbtNoIkG9BYyN+dxznW+lyAhRmzcKKFfj+2uSShTG3zghpgltjPgQjKC7K6PNN+49NaSl6eq7dbcX9WLf+tUcfekj982c7djzR0EDAAfT6oyEAQc/alSs7OjoA3Lls+c8PvqoIgkMjFOfnjCal/rFIllEnivK8mVa3J+SPizajvirf2jriF+NJnSTdOtt+yRcVBCRl5cuz8xJjvnP+OEzG3Cz9F2dYpjjz/03+/vtx/Djq6+uPpN/GFy9e/MADDxQVFfV6/N3t/3Pk9dei0SiAnGzLqdd+t/DeFQA+HPbVzLT6g+HBIW9tPOyyWPwz7HnJhNflq8jS9IsUC/NLXS74g25b7mBeXq3b1QOtSRAKCm2aAScE4UPDLTVlsw2ShM4eALCYUVE8iXwMCAIA1D1Gc1UaEiADWZOVqZvZtaYgFoutX7/+wIED03WYP3/+b3+xveqOOzsEnUL6E2JdoS0uSb64VGHPjpz75JP8/DkaxesNVVTO6xgYLRATdls2/CF3Qb7f5S8XpCG7XVSUwmSiYzSk2HL84WidWZ9T4IBGAIDWTiwsm3SlDQD5gAYQgWvGgwQkriB/nWIymfbv39/Q0LBv376Wlpbe3t5gMGgwGCw2+5e/9DcPPri6/qE1lrFAXyw5Kz+7IDvro2EfAEhywO3F0FAgKZkFaADq9QCyTVn+UNieBheSSeRb1e/+hDQrS1tQmPvRpTgkGaKIrj6QiESREC+vfAgAMDEtJj5m5AJxIAAYAAmwA/40+SmPGSrOlMcMFeGaMhJOXPSFBUHQa4QamzHccalzZoHVaPBG4tUOS9zl6Rb0OqNB9Ie/NNsmiOKHo2FTrqVGI7YGRMmg14vJObMdAZevTCMP5dlFRbHG453BuDXX4g1EqvXIkUVkm5Gfh7MXUDr3/wA/iUnFnapLrAAAAABJRU5ErkJggg=="; Map< String, String> data = new HashMap<>(); data.put("token",token); data.put("type", typeid); data.put("image", image); String resultString = Jsoup.connect("http://api.jfbym.com/api/YmServer/customApi") .requestBody(JSON.toJSONString(data)) .header("Content-Type", "application/json") .ignoreContentType(true).timeout(120000).post().text(); JSONObject jsonObject = JSONObject.parseObject(resultString); Integer code = jsonObject.getInteger("code"); if (code==10000) { String result=jsonObject.getJSONObject("data").getString("data"); System.out.println("识别成功结果为:"+result); }else { System.out.println("识别失败原因为:"+jsonObject.getString("msg")); } } }* *org.jsoup *jsoup *1.11.3 ** *com.alibaba *fastjson *1.2.70 *test *
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
#######触摸精灵#####
## 谷歌获取参数, 查看版本 按F12,进入console, 输入自动定义函数findRecaptchaClients() ``` function findRecaptchaClients() { // eslint-disable-next-line camelcase if (typeof (___grecaptcha_cfg) !== 'undefined') { // eslint-disable-next-line camelcase, no-undef return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => { const data = { id: cid, version: cid >= 10000 ? 'V3' : 'V2' }; const objects = Object.entries(client).filter(([_, value]) => value && typeof value === 'object'); objects.forEach(([toplevelKey, toplevel]) => { const found = Object.entries(toplevel).find(([_, value]) => ( value && typeof value === 'object' && 'sitekey' in value && 'size' in value )); if (typeof toplevel === 'object' && toplevel instanceof HTMLElement && toplevel['tagName'] === 'DIV'){ data.pageurl = toplevel.baseURI; } if (found) { const [sublevelKey, sublevel] = found; data.sitekey = sublevel.sitekey; const callbackKey = data.version === 'V2' ? 'callback' : 'promise-callback'; const callback = sublevel[callbackKey]; if (!callback) { data.callback = null; data.function = null; } else { data.function = callback; const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) => `['${key}']`).join(''); data.callback = `___grecaptcha_cfg.clients${keys}`; } } }); return data; }); } return []; } ``` 然后在consolse执行这个函数findRecaptchaClients() 即可找到出对应的信息 其中,version字段为版本 其中,sitekey 其中,pageurl ``` [ { "id": "0", "version": "V2", "sitekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "function": "onSuccess", "callback": "___grecaptcha_cfg.clients['0']['l']['l']['callback']", "pageurl": "https://www.google.com/recaptcha/api2/demo" } ] ``` ## Hcaptcha获取参数 打开网页,按F12->Elements,搜索关键词data-sitekey data-sitekey就是参数websiteKey, `
` websiteURL一般就是当前网页的域名,
reCaptcha v3
需要action值,而且必须正确,
通过网页源代码中搜索关键词 grecaptcha
:
其中action: xxxxx 就是我们要的值,例如:
grecaptcha.ready(function() { grecaptcha.execute('6LdpS-gUAAAAAL3Qr2yP7rkrQjkKBVvEY_48JS5l', 3{action: 'login'}).then(function(token) { }); });
如果网页中搜索不到,则可能是js被混肴、加密了,需要尝试其他方式
enterprise.js
reCaptcha v2 企业版
:请求链接不含render参数,或者render参数为explicit
,例如:
https://recaptcha.net/recaptcha/enterprise.js?render=explicit&hl=zh-cn
reCaptcha v3 企业版
:请求链接含有render参数,并且render参数不等于explicit
,例如:
https://www.google.com/recaptcha/enterprise.js?render=6LeP9okbAAAAANjfmUxqLDJvHZtqvXr_Fg34FhP-
3.判断 invisible 参数
查看reCAPTCHA 的 iframe 链接包含参数 size=invisible 例如:
这种为 隐形版本 ,传参时,invisible="1"
另外一种:
这种为 非隐形版本 ,传参时,invisible="0" 或者不传.
现在我们得到这个resonse值了,然后应该怎么通过这个该死的验证呢?
{ "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnUJCZrgjwLLdt7cb0..." }
我们要明白,我们这个接口,并不是一个能自动帮你点图片的工具,
这是一个模拟谷歌服务器直接给你返回正确的结果(response)的工具,
你拿到了这个正确的结果(response),接下来就应该把这个结果提交给你要登陆的网站,
告诉它,你已经通过验证了!
那么问题来了,应该如何提交给网站呢?一般有两种情况:
也就是post数据包的方式提交给网站,
注意: 一般抓包观察提交请求的其中一个参数有我们返回的令牌数据,有可能在提交参数里,也有可能在请求头里;
著需要把我们这个返回的参数填到这个位置提交就能通过.根本不需要浏览器.
这时候观察一下你正常提交时,浏览器发送的请求的参数名,一般为g-recaptcha-response
,
如下图所示,把我们正确的结果(response)提交,就能通过验证了。
这是最简单,也是推荐的方式。
2.第二种,模拟操作
或者 直接执行js 通过selenium 执行 注入
(function (response) {
const ele = document.getElementById("g-recaptcha-response");
if (ele) {
ele.innerHTML = response;
ele.text = response;
}
const base = Object.values(___grecaptcha_cfg.clients)[0];
for (let k0 of Object.keys(base)) {
for (let k1 of Object.keys(base[k0])) {
if (base[k0][k1] && base[k0][k1].callback && typeof base[k0][k1].callback === 'function') {
base[k0][k1].callback(response);
return true;
}
}
}
return false;
})('你在平台获取的RESPONSE');
.版本 2
.支持库 spec
.程序集 验证码
.子程序 请求实例, , , 依赖包!!! 【鱼刺类.HTTP】 链接:https://pan.baidu.com/s/1StEutzyXBaUeQ9NQSygG_g?pwd=ABCD 提取码:ABCD
.局部变量 postJson, zyJsonValue
.局部变量 resJson, zyJsonValue
.局部变量 apiUrl, 文本型
.局部变量 heads, 文本型
.局部变量 data, 文本型
.局部变量 http, WinHttpW
.局部变量 response, 文本型
' 第一步:创建任务
postJson.创建 ()
apiUrl = “http://api.jfbym.com/api/YmServer/funnelApi”
heads = “Content-Type: application/json”
postJson.置文本 (“token”, “”)
postJson.置文本 (“type”, “40004”)
postJson.置文本 (“googlekey”, “”)
postJson.置文本 (“pageurl”, “”)
postJson.置文本 (“invisible”, “1”)
postJson.置文本 (“action”, “login”)
postJson.置文本 (“enterprise”, “1”)
data = postJson.到文本 ()
http.Open (“POST”, apiUrl)
http.SetRequestHeaders (heads)
.如果真 (http.Send (data) = 假)
postJson.置文本 (“msg”, “发送失败!”)
response = postJson.到文本 ()
.如果真结束
response = http.GetResponseTextA ()
.如果真 (resJson.解析 (response) = 假)
信息框 (“请求异常”, 0, , )
.如果真结束
调试输出 (response)
' 第二步:循环获取答案
apiUrl1 = “http://api.jfbym.com/api/YmServer/funnelApiResult”
postJson.置文本 (“token”, “”)
postJson.置文本 (“captchaId”, “第一步获取的captchaId”)
postJson.置文本 (“recordId”, “第一步获取的recordId”)
data = postJson.到文本 ()
http.Open (“POST”, apiUrl)
http.SetRequestHeaders (heads)
.如果真 (http.Send (data) = 假)
postJson.置文本 (“msg”, “发送失败!”)
response = postJson.到文本 ()
.如果真结束
response = http.GetResponseTextA ()
.如果真 (resJson.解析 (response) = 假)
信息框 (“请求异常”, 0, , )
.如果真结束
调试输出 (response)
data-sitekey
data-sitekey
就是参数 site_key
site_url 一般就是当前网页的域名
2、打开包含的网页,按F12->Network,搜索关键词hcaptcha
找到一个请求:其中sitekey
就是我们需要的 site_key
https://hcaptcha.com/checksiteconfig?v=4ad5c92&host=democaptcha.com&sitekey=51829642-2cda-4b09-896c-594f89d700cc&sc=1&swa=1
import json import time import requests class YdmVerify(object): _custom_url = "http://api.jfbym.com/api/YmServer/customApi" _token = "" _headers = { 'Content-Type': 'application/json'} 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": "9a955efe-a6f1-47ac-a433-6e0a317577b3", "pageurl": "https://breachforums.st/member?action=login", "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()
当报错 服务繁忙,可能原因是图片问题,先检查下图片。如确认无误,联系客服解决
base64要上传正确的字符
在辅助软件上获取到的数据可能是这样:
data:image/jpeg;base64,/9j/5AAFmv39/+AAEEpGSUYAAQEAAAEAAQAA/9sA..................
这张图的正确base64字符是以下:
/9j/5AAFmv39/+AAEEpGSUYAAQEAAAEAAQAA/9sA..................
base64字符串里别误操作加入空格,或是换行符等。这样会破坏base64字符串,造成不是图片或是图片不完整
按键精灵pc版本 如何解析返回的json字符串 详细内容可点击请看以下链接 http://bbs.anjian.com/showtopic-697721-1.aspx
温馨提示:我们将在您提交信息后的30分钟内与您取得联系,请您保持电话通畅,谢谢!