{"id":25278435,"url":"https://github.com/saobby/saobbycaptchadoc","last_synced_at":"2026-01-19T05:33:27.643Z","repository":{"id":173938098,"uuid":"524010440","full_name":"Saobby/SaobbyCAPTCHAdoc","owner":"Saobby","description":"Saobby验证码的文档","archived":false,"fork":false,"pushed_at":"2023-03-02T14:09:47.000Z","size":34,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-12T17:50:35.142Z","etag":null,"topics":["captcha"],"latest_commit_sha":null,"homepage":"https://captcha.saobby.com/","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Saobby.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-12T08:24:26.000Z","updated_at":"2024-08-02T09:46:56.000Z","dependencies_parsed_at":null,"dependency_job_id":"fb26760d-c768-4b0e-bd01-ab77eab00b17","html_url":"https://github.com/Saobby/SaobbyCAPTCHAdoc","commit_stats":null,"previous_names":["saobby/saobbycaptchadoc"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Saobby%2FSaobbyCAPTCHAdoc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Saobby%2FSaobbyCAPTCHAdoc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Saobby%2FSaobbyCAPTCHAdoc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Saobby%2FSaobbyCAPTCHAdoc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Saobby","download_url":"https://codeload.github.com/Saobby/SaobbyCAPTCHAdoc/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247478330,"owners_count":20945267,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["captcha"],"created_at":"2025-02-12T17:42:31.680Z","updated_at":"2026-01-19T05:33:27.610Z","avatar_url":"https://github.com/Saobby.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"##### 注意: API域名已修改为 captcha.saobby.tk\n# SaobbyCAPTCHA文档\n## 简介\nSaobbyCAPTCHA是一个**人机验证**服务，它可以准确识别机器人爬虫，不让烦人的机器人程序给你的网络表单提交垃圾信息。 \n\n![SaobbyCAPTCHA截图](https://static.saobby.com/i/saobbycaptcha.png)  \n\n使用SaobbyCAPTCHA较为简单，您只需要稍稍修改一下您的前端代码，添加验证码的窗口和JS代码，并在后端验证前端传来的密钥即可。  \n您可以去[SaobbyCAPTCHA主页](https://captcha.saobby.tk)查看示例(感谢[WuX-UI](https://wux-ui.tk/))，如果您觉得我做的验证码窗口太丑(事实上大部分人都是这么认为的)，您也可以利用下文中的API自己做一个验证码窗口。\n## API文档\n### 获取验证码图片(前端使用)\n#### 请求\n* API URL: **`https://captcha.saobby.tk/api/get_image`**\n* 请求方式: **`POST`**\n* 请求载荷: **`无`**\n#### 响应\n* 响应数据类型: **`JSON`**\n* 响应包含参数: \n  * **`captcha_id`**: 类型:**`字符串`**: 验证码唯一ID,获取验证码token时会用到\n  * **`captcha_img`**: 类型:**`字符串`**: 验证码图片Base64值,可直接塞进`\u003cimg\u003e`标签的`src`属性中\n  * **`captcha_lens`**: 类型:**`整型数`**: 验证码的字数  \n  * **`tip_img`**: 类型:**`字符串`**: 验证码提示文字图片Base64\n* 响应示例: \n  *  {\n  *    \"captcha_id\":\"GBXiOvIfJ30Kn9Stn0H5DxCgT6d3aVTAXysMhF9D91n7NGDQyRUcf3t1CYRE4leu\", \n  *    \"captcha_img\":\"data:image/png;base64,iVBORw0KGgoAAAAN......\",\n  *    \"captcha_lens\":5, \n  *    \"tip_img\":\"...\"\n  *  }\n##### 注意:每张验证码图片的有效期只有5分钟,若5分钟内未完成验证码,则该验证码作废\n### 获取验证码密钥(前端使用)\n#### 请求\n* API URL: **`https://captcha.saobby.tk/api/get_token`**\n* 请求方式: **`POST`**\n* 请求载荷类型: **`表单数据`**\n* 请求载荷参数: \n  * **`id`**: 上文中API返回的验证码的唯一ID\n  * **`pos`**: 用户点击坐标(图片**左上角**为坐标原点,坐标1单位长度对应图片中1像素),格式:**`第1个字的x坐标,第1个字的y坐标,第2个字的x坐标,第2个字的y坐标,...第n个字的x坐标,第n个字的y坐标,`**(注意每个坐标值之间用英文逗号隔开)\n* 请求载荷示例: `id=bMeH04C5aXb5v2JpDwzQrA7AM7iOYlSJ1tQJNoX7WaKKIKqRHUHfiLX0usHPsfTq\u0026pos=218,105,155,115,117,137,160,182,214,152,245,143,245,65,`\n#### 响应\n* 响应数据类型: **`JSON`**\n* 响应包含参数: \n  * **`validity`**: 类型: **`布尔`**: 传来的信息是否有效?有效为`true`,否则为`false`\n  * **`token`**: 类型:**`字符串`**: 验证码密钥\n  * **`message`**: 类型:**`字符串`**: 展示给用户的消息\n* 响应示例: \n  * {\n  *   \"validity\": false, \n  *   \"message\": \"\\u9a8c\\u8bc1\\u7801\\u9519\\u8bef\", \n  *   \"token\": null\n  * }\n##### 注意:**每个验证码只有一次验证机会(不论对了还是错了)!**\n##### 注意:**每个密钥的有效时间只有10分钟,超时即作废**\n### 检查验证码密钥是否有效(后端使用)\n* API URL: **`https://captcha.saobby.tk/api/check_token`**\n* 请求方式: **`POST`**\n* 请求载荷类型: **`表单数据`**\n* 请求载荷参数: \n  * **`s-captcha-token`**: 前端传来的验证码密钥\n* 请求载荷示例: `s-captcha-token=ovr7XEpDMlYE8j6svwJueqJHna1BV9ozwWdjA1WI1OzwPBQb2uOnIgu29LiJekr5`\n#### 响应\n* 响应数据类型: **`JSON`**\n* 响应包含参数: \n  * **`validity`**: 类型: **`布尔`**: 传来的密钥是否有效?有效为`true`,否则为`false`\n  * **`message`**: 类型:**`字符串`**: 消息\n* 响应示例:\n  * {\n  *   \"validity\": true, \n  *   \"message\": null\n  * }\n##### 注意:每个密钥都是一次性的,验证过一次之后立即作废\n## 结语\n如果你发现了Bug或者有任何建议,请在这个仓库给我发issue!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaobby%2Fsaobbycaptchadoc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaobby%2Fsaobbycaptchadoc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaobby%2Fsaobbycaptchadoc/lists"}