收藏官网首页
查看: 1453|回复: 0

[经验分享] c#获取图形验证码实例

106

主题

107

帖子

7261

积分

论坛元老

Rank: 8Rank: 8

积分
7261
跳转到指定楼层
楼主
 楼主| 发表于 2023-9-30 22:44:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
汉枫LPB120模块
    机智云的图形验证码可以作为短信验证码的获取,短信验证码关系到手机号用户注册,手机号用户重置密码,其他您认为需要短信验证码的敏感操作,因此获取图形验证码是一个必要的前置操作。

首先,我们在form里放置button和picturebox button用于发送请求,picutrebox用于显示图像


接下来,我们先定义需要的变量和api接口,用于传输请求需要的参数和存放获取到的图形数据



然后,就是请求接口得到图形的url了,使用httpclient构建一个同步的请求即可,代码如下:

  1. using (HttpClient client = new HttpClient())
  2.             {
  3.                 // 添加请求头
  4.                 client.DefaultRequestHeaders.Add("X-Gizwits-Application-Token", applicationToken);
  5.                 client.DefaultRequestHeaders.Add("X-Gizwits-Application-Id", applicationId);

  6.                 try
  7.                 {
  8.                     // 发送GET请求
  9.                     HttpResponseMessage response = client.GetAsync(apiUrl).Result;

  10.                     // 检查响应状态码
  11.                     if (response.IsSuccessStatusCode)
  12.                     {
  13.                         // 解析JSON响应数据
  14.                         string jsonResponse = response.Content.ReadAsStringAsync().Result;
  15.                         JObject json = JObject.Parse(jsonResponse);

  16.                         // 获取captcha_url
  17.                         string captchaUrl = json["captcha_url"].ToString();
  18.                         string captchaId = json["captcha_id"].ToString();

  19.                         Console.WriteLine("captcha_url: " + captchaUrl);
  20.                         Console.WriteLine("captcha_id: " + captchaId);
  21.                         imageUrl = captchaUrl;
  22.                     }
  23.                     else
  24.                     {
  25.                         Console.WriteLine("请求失败: " + response.StatusCode);
  26.                     }
  27.                 }
  28.                 catch (Exception ex)
  29.                 {
  30.                     Console.WriteLine("发生异常: " + ex.Message);
  31.                 }
  32.             }
复制代码
请求到json后,我们还要取出里面的url并且再次发送请求得到图像数据:

  1. using (HttpClient client = new HttpClient())
  2.             {
  3.                 try
  4.                 {
  5.                     // 发送 GET 请求获取图像
  6.                     HttpResponseMessage response = client.GetAsync(imageUrl).Result;

  7.                     // 检查响应状态码
  8.                     if (response.IsSuccessStatusCode)
  9.                     {
  10.                         // 将响应内容读取为字节数组并赋值给全局变量
  11.                         imageBytes = response.Content.ReadAsByteArrayAsync().Result;

  12.                         // 此时,图像数据存储在 imageBytes 中
  13.                         // 可以在整个程序中访问 imageBytes

  14.                         Console.WriteLine("成功获取图像,字节数:" + imageBytes.Length);
  15.                     }
  16.                     else
  17.                     {
  18.                         Console.WriteLine("请求失败: " + response.StatusCode);
  19.                     }
  20.                 }
  21.                 catch (Exception ex)
  22.                 {
  23.                     Console.WriteLine("发生异常: " + ex.Message);
  24.                 }
  25.             }
复制代码
得到图像原始的数据后,我们要把图像加载到内存,赋给picturebox显示,代码如下:

  1. if(imageBytes != null)
  2.             {
  3.                 using (System.IO.MemoryStream stream = new System.IO.MemoryStream(imageBytes))
  4.                 {
  5.                     pictureBox1.Image = System.Drawing.Image.FromStream(stream);
  6.                 }
  7.             }
复制代码


完成后,我们运行看一下效果:



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表