|  | 
 
| 机智云的图形验证码可以作为短信验证码的获取,短信验证码关系到手机号用户注册,手机号用户重置密码,其他您认为需要短信验证码的敏感操作,因此获取图形验证码是一个必要的前置操作。 
 首先,我们在form里放置button和picturebox button用于发送请求,picutrebox用于显示图像
 
 
 接下来,我们先定义需要的变量和api接口,用于传输请求需要的参数和存放获取到的图形数据
 
 
 
 然后,就是请求接口得到图形的url了,使用httpclient构建一个同步的请求即可,代码如下:
 
 
 请求到json后,我们还要取出里面的url并且再次发送请求得到图像数据:复制代码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);
                }
            }
 
 得到图像原始的数据后,我们要把图像加载到内存,赋给picturebox显示,代码如下:复制代码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);
                }
            }
 
 复制代码if(imageBytes != null)
            {
                using (System.IO.MemoryStream stream = new System.IO.MemoryStream(imageBytes))
                {
                    pictureBox1.Image = System.Drawing.Image.FromStream(stream);
                }
            }
 完成后,我们运行看一下效果:
 
 
 
 
 | 
 |