mmuyu 发表于 2023-9-30 22:44:15

c#获取图形验证码实例

    机智云的图形验证码可以作为短信验证码的获取,短信验证码关系到手机号用户注册,手机号用户重置密码,其他您认为需要短信验证码的敏感操作,因此获取图形验证码是一个必要的前置操作。

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


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



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

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

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

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

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

                        Console.WriteLine("captcha_url: " + captchaUrl);
                        Console.WriteLine("captcha_id: " + captchaId);
                        imageUrl = captchaUrl;
                  }
                  else
                  {
                        Console.WriteLine("请求失败: " + response.StatusCode);
                  }
                }
                catch (Exception ex)
                {
                  Console.WriteLine("发生异常: " + ex.Message);
                }
            }请求到json后,我们还要取出里面的url并且再次发送请求得到图像数据:

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

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

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

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

if(imageBytes != null)
            {
                using (System.IO.MemoryStream stream = new System.IO.MemoryStream(imageBytes))
                {
                  pictureBox1.Image = System.Drawing.Image.FromStream(stream);
                }
            }

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



页: [1]
查看完整版本: c#获取图形验证码实例