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

yizhihongxing

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日

相关文章

  • VScode+cuda编程常见环境问题的解决

    VScode+cuda编程常见环境问题的解决攻略 简介 本文主要解决在使用VScode和CUDA进行编程过程中所遇到的常见环境问题,包括环境安装和配置、代码编译和调试。本文旨在帮助使用者快速解决类似问题,提高编程效率。 环境搭建 安装VScode及CUDA环境 下载安装VScode:在官网上下载适合您操作系统版本的VScode安装包,双击安装即可。 安装CU…

    人工智能概览 2023年5月25日
    00
  • 使用MDC实现日志链路跟踪

    使用MDC(Mapped Diagnostic Context)实现日志链路跟踪可以帮助我们在多线程或分布式环境下更加方便地追踪日志,这里给出一份完整的攻略。 什么是MDC MDC是log4j日志系统中的一个特性,可以让我们通过一个类似于ThreadLocal的方式轻松地保存和传递上下文信息。在MDC中,我们可以将一个key-value的配对以map的形式保…

    人工智能概览 2023年5月25日
    00
  • CentOS 6.X系统下升级Python2.6到Python2.7 的方法

    下面是CentOS 6.X系统下升级Python2.6到Python2.7的方法的完整攻略: 1. 安装Python2.7 首先,我们需要安装Python2.7,可以通过以下命令进行安装: yum install -y centos-release-scl yum install -y python27 scl enable python27 bash 第一…

    人工智能概览 2023年5月25日
    00
  • Python用GET方法上传文件

    使用GET方法上传文件在HTTP协议中是不符合规范的。一般来说,上传文件应该使用POST方法或PUT方法。而在Python中使用GET方法上传文件也是不建议的。以下是使用Python通过POST方法上传文件的完整攻略: 1. 准备上传文件和服务器接口 首先,我们需要准备好要上传的文件,以及服务端接口。为了方便演示,我们可以先创建一个本地的测试文件,并搭建一个…

    人工智能概论 2023年5月25日
    00
  • Django使用httpresponse返回用户头像实例代码

    Django使用HttpResponse返回用户头像的实例代码可以分为以下几个步骤: 1.获取用户头像 首先需要获取用户的头像,可以通过Django的模型系统获取,假如我们有一个名为UserProfile的用户模型,该模型含有一个名为avatar的ImageField字段用于存储用户头像,我们可以这样获取用户头像: from django.shortcuts…

    人工智能概论 2023年5月25日
    00
  • angular.js+node.js实现下载图片处理详解

    标题: Angular.js+Node.js实现下载图片处理详解 简介 本文将介绍如何使用Angular.js和Node.js实现下载图片的功能,同时演示如何对下载的图片进行处理。本文将分为以下几个部分讲解: 使用Angular.js实现前端页面 使用Node.js实现后端接口 利用Node.js编写图片处理脚本 实现一个完整的示例,演示如何下载并处理图片 …

    人工智能概论 2023年5月25日
    00
  • django中使用Celery 布式任务队列过程详解

    下面是 “Django中使用Celery布局任务队列过程详解”的完整攻略: 什么是Celery? Celery是一个基于Python的分布式任务队列,它可以让您轻松地将工作分散到多个工作线程或分布式系统中。使用Celery可以让您将耗时或资源密集型任务从同步请求/响应循环中分离出来,使您的应用程序更加响应。 为什么要使用Celery? 在讨论如何使用Cele…

    人工智能概览 2023年5月25日
    00
  • spring cloud zuul增加header传输的操作

    下面详细讲解Spring Cloud Zuul如何增加header传输的操作: 一、概述 在使用Spring Cloud Zuul作为网关时,可能会需要在请求路由时添加一些header参数。比如,你可能需要在请求中添加一个身份认证的Token,或是添加一些其他的请求头信息,这些信息都可以在微服务内部进行处理。 二、实现步骤 创建Zuul Filter 我们可…

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