Python+KgCaptcha实现验证码的开发详解

Python+KgCaptcha实现验证码的开发详解

本攻略将详细讲解使用Python编写KgCaptcha验证码的实现方法,并提供两个示例说明。

什么是KgCaptcha

KgCaptcha是一种验证码技术,它与传统的验证码比如数字、字母、图片等不同,它采用了数据分析、人工智能、机器学习等技术,能够更好地识别人机行为,提高网站的安全性。

技术实现

第一步:安装依赖库

我们需要使用Python的requests库来发送请求,使用Pillow库处理图片,使用Numpy库进行矩阵计算。

pip install requests
pip install Pillow
pip install numpy

第二步:请求KgCaptcha API

import requests
def get_captcha():
    url = "https://captcha.su.panda.gt/verify"
    headers = {
        "accept": "application/json, text/javascript, */*; q=0.01",
        "accept-language": "zh-CN,zh;q=0.9",
        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
        "cookie": "kg_mid=5e41bddd0f56a48103df4cb7bd95502f; u=92596538; uid=92596538; sid=1420787359024089296; _qddamta_4000415090=3-0; Hm_lvt_d7682ab43891c68a00de46e9ce5b76aa=1635325487; captcha=sound//25452269/2.mp3; captcha_token=87862d910e6c424db56e80e8022c1d9b_846665308e024f5eae64ce08dfd72aef",
        "referer": "https://www.kugou.com/yy/index.php?r=play/getdata&hash=808597A4B1E3A976DDF46B180259AB79",
        "sec-ch-ua": ""Google Chrome";v="93", ""Not;A Brand";v="99", ""Chromium";v="93"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": ""macOS"",
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-origin",
        "x-requested-with": "XMLHttpRequest"
    }
    data = {
        "url": "https://captcha.su.panda.gt/captcha.jpg", # 验证码图片的地址
        "referer": "https://www.kugou.com/yy/index.php?r=play/getdata&hash=808597A4B1E3A976DDF46B180259AB79", # 参考来源
        "upstream": "kiner-proxy",
        "token": "87862d910e6c424db56e80e8022c1d9b", # 验证码token
        #"dynamic": 1
    }
    response = requests.post(url, data=data, headers=headers)
    return response.json()

captcha_json = get_captcha()
print(captcha_json) # 输出验证码json信息

第三步:获取验证码图片

from PIL import Image
import requests
import io
import numpy as np

# 请求验证码图片
def get_captcha_image(url):
    response = requests.get(url)
    image = Image.open(io.BytesIO(response.content))
    return image

# 处理图片,转换为矩阵格式
def process_image(image):
    grey_image = image.convert('L')
    binary_image = grey_image.point(lambda x: 0 if x < 128 else 255, '1')
    binary_matrix = np.array(binary_image).astype(int)
    return binary_matrix

captcha_image_url = captcha_json['captcha']
captcha_image = get_captcha_image(captcha_image_url)
captcha_matrix = process_image(captcha_image)
print(captcha_matrix) # 输出图片矩阵

第四步:识别验证码

import requests
import json
import numpy as np

# 识别验证码
def recognize_captcha(captcha_matrix):
    # 构建验证码二进制字符串,将矩阵转换为字符串
    captcha_bin_str = ''.join([''.join([str(x) for x in row]) for row in captcha_matrix])
    url = "https://captcha.su.panda.gt/recognize"
    headers = {
        "Content-Type": "application/json;charset=UTF-8",
        "Referer": "https://captcha.su.panda.gt"
    }
    data = {
        "xxc": 1,
        "ac": "default",
        "captcha": captcha_bin_str,
        "dynamic": 0,
        "gt": captcha_json['gt'],
        "token": captcha_json['token']
    }
    response = requests.post(url, data=json.dumps(data), headers=headers)
    print(response.text) # 输出验证码识别结果

recognize_captcha(captcha_matrix)

示例说明

示例一:获取验证码信息

import requests
import json

def get_captcha_info():
    url = "https://captcha.su.panda.gt/get_captcha"
    headers = {
        "Host": "captcha.su.panda.gt",
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.38",
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Referer": "https://www.codesky.me/article/?13/",
        "X-Requested-With": "XMLHttpRequest"
    }
    response = requests.get(url, headers=headers)
    return response.json()

captcha_info = get_captcha_info()
print(captcha_info) # 输出验证码信息json

示例二:获取指定ID的验证码信息

import requests
import json

def get_captcha_info_by_id(id):
    url = f"https://captcha.su.panda.gt/get_captcha?id={id}"
    headers = {
        "Host": "captcha.su.panda.gt",
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.38",
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Referer": "https://www.codesky.me/article/?13/",
        "X-Requested-With": "XMLHttpRequest"
    }
    response = requests.get(url, headers=headers)
    return response.json()

captcha_info = get_captcha_info_by_id(1234)
print(captcha_info) # 输出指定ID的验证码信息json

以上示例中,第一个示例获取了一个新的验证码信息,第二个示例获取了ID为1234的验证码信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python+KgCaptcha实现验证码的开发详解 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • IDEA maven项目中刷新依赖的两种方法小结

    当我们在IDEA中使用maven进行Java项目开发时,经常需要添加或修改项目依赖,而这时依赖库不会自动加载进来,需要手动刷新。接下来,我们将讲解IDEA maven项目中刷新依赖的两种方法小结: 方法一:在Maven Projects视图中右击,点击’Reload All Maven Projects’选项 步骤: 点击IDEA右侧的’Maven’视图 t…

    人工智能概览 2023年5月25日
    00
  • Django集成富文本编辑器summernote的实现步骤

    下面我来详细讲解一下“Django集成富文本编辑器summernote的实现步骤”的完整攻略。 1. 安装依赖 首先需要安装一个 Python 拓展包 django-summernote: pip install django-summernote 2. 配置 Django 在项目目录下的 settings.py 文件中添加以下内容: INSTALLED_A…

    人工智能概论 2023年5月25日
    00
  • MongoDB 删除文档的方式(删除一个、批量删除)

    MongoDB 是一个 NoSQL 数据库系统,它提供了多种删除文档的方式。在本文中,我们将详细讲解 MongoDB 删除文档的方式,包括删除一个和批量删除。 删除一个文档 要删除一个文档,我们可以使用 deleteOne 方法。该方法接受一个查询条件作为参数,它将删除满足该条件的第一个文档。如果查询条件匹配多个文档,则只删除第一个。 ### 删除一个文档 …

    人工智能概论 2023年5月25日
    00
  • Java 使用Filter实现用户自动登陆

    下面是详细讲解“Java 使用Filter实现用户自动登陆”的完整攻略。 一、什么是Filter Filter是Servlet规范中的一种组件,它可以对请求和响应进行过滤处理,对于实现一些与web应用程序与业务无关的功能非常有用。例如:用户登录认证、URL访问控制、字符编码转换等等。 二、Filter工作原理 Filter工作原理是前置拦截器,即它位于请求到…

    人工智能概论 2023年5月25日
    00
  • 在Mac OS下搭建LNMP开发环境的步骤详解

    在Mac OS下搭建LNMP开发环境的步骤详解 简介 LNMP(Linux + Nginx + MySQL + PHP)是一种网站开发和运行环境,与传统的LAMP(Linux + Apache + MySQL + PHP)相比,LNMP具有更高的性能和更低的资源消耗,是目前非常流行的web开发环境之一。本文将详细介绍如何在Mac OS上搭建LNMP开发环境。…

    人工智能概览 2023年5月25日
    00
  • 浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置

    标题 浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置 背景 在使用多卡服务器进行模型训练时,由于显存限制,可能会出现一部分 GPU 显存不足无法使用,或者需要提前将一些 GPU 预留出来供其他程序使用的情况。本文将提供一些方法来解决这种情况下的显存使用问题。 方案 1. 隐藏部分 GPU 在 Linux 系统下,我们可以使用 CU…

    人工智能概论 2023年5月25日
    00
  • SpringCloud 服务负载均衡和调用 Ribbon、OpenFeign的方法

    关于SpringCloud服务负载均衡和调用Ribbon、OpenFeign的方法,以下是完整攻略: 什么是负载均衡 负载均衡(Load Balance)是指分摊到不同的工作单元上的计算机网络、服务器、磁盘、CPU等资源,以提高系统的性能、可靠性和稳定性。在分布式系统中,负载均衡是非常重要的。 SpringCloud中Ribbon和OpenFeign的介绍 …

    人工智能概览 2023年5月25日
    00
  • Python环境的安装以及PyCharm编辑器配置教程详解

    下面详细讲解“Python环境的安装以及PyCharm编辑器配置教程详解”。 Python环境的安装 系统要求 Python环境的安装需要满足以下系统要求: 硬件:2 GHz或更快的处理器,2 GB或更多内存,1 GB或更多磁盘空间(具体硬件要求视Python版本和应用程序的使用要求而定) 操作系统:Windows、macOS、Linux等 Python版本…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部