电话咨询
19922193247




注意:
类型:定制-X度单图旋转
说明:带有定制前缀的,是搜集该类图片训练的机器学习模型;请用户检查自己的打码图是否和图例类似, 测试无误后可使用.
1.如遇到服务繁忙,大概率是图片base64的问题,请看常见问题里的:关于base64格式图片的问题;如果确认图片base64无问题,请联系工作人员解决.
2.如遇到无权限访问,用户中心秘钥重置下,再填到代码里的token试试;如果还是不行,请联系工作人员解决.
只支持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 | 90007 | 是 | 
| 参数名称 | 传值类型 | 说明 | 
|---|---|---|
| code | int | 状态值 | 
| msg | string | 请求说明 | 
| data | array | 打码数据 | 
| --code | int | 打码服务状态 | 
| --data | string | 数英计算:答案; 滑块:像素距离; 旋转:角度; 坐标类型:按顺序坐标... | 
| --time | string | 打码服务时长 | 
| code | 说明 | 
|---|---|
| 10000 | 识别成功 | 
| 10001 | 参数错误 | 
| 10002 | 余额不足 | 
| 10003 | 无此访问权限 | 
| 10004 | 无此验证类型 | 
| 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依赖
     * 
     *      
     *          org.jsoup 
     *          jsoup 
     *          1.11.3 
     *       
     *      
     *          com.alibaba 
     *          fastjson 
     *          1.2.70 
     *          test 
     *       
     *  
     */
    public static void main(String[] args) throws IOException {
        //注册后用户中心找到token填这儿
        String token= "用户中心token";
        //类型id 产品列表里找自己需要的产品的id,然后改这儿
        String typeid= "10110";
        // 图片二进制流base64字符串
        String image= "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";
        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"));
        }
    }
}
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.jsreCaptcha 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-sitekeydata-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分钟内与您取得联系,请您保持电话通畅,谢谢!
