HTTP协议——HttpClient请求类

HttpClient请求类

在C#中,HttpClient类是.NET Framework提供的一个用于发送HTTP请求的第三方库。它不是.NET Framework的核心部分,因此可以说HttpClient请求是第三方的。

使用 HttpClient类发起GET请求

cs 复制代码
    private async void button1_Click(object sender, EventArgs e)
    {
        try
        {
            // 发送天气预报的接口
            // 1 创建爱httpClient对象,用来发起请求的 Client客户端
            HttpClient client = new HttpClient();
            // 2 发起请求
            // getAsync 发起get请,并是一个异步的,返回值是task任务,sww
            HttpResponseMessage res = await client.GetAsync("http://192.168.113.74:3000/tianQi");
    
            // 3 通过调用 EnsureSuccessStatusCode() 查看请求是否成功
            res.EnsureSuccessStatusCode();
    
            // 4 取出相应数据 res.Content相应数据内容
            string data = await res.Content.ReadAsStringAsync();
            this.richTextBox1.Text = data;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

使用 HttpClient类发起POST请求

使用 HttpClient类发起POST请求(提交类型为application/x-www-form-urlencoded)

请求的格式为原生表单

第一中传递请求数据方法
cs 复制代码
    private async void button2_Click(object sender, EventArgs e)
    {
        // PostAsync 发送Post请求,参数1是url,参数2 是FormUrlEncodedContent对象传递数据
        // 1 创建客户端对戏那个发送post异步请求,返回值是响应数据
        HttpResponseMessage res = await new HttpClient().PostAsync("http://192.168.113.74:3000/register",
            // 第一种数据
            new FormUrlEncodedContent(new Dictionary<string, string>{ {"name","菠萝吹雪" }, {"psw","123456" }})
            );
        // 2 获取字符串数据
        string data = await res.Content.ReadAsStringAsync();
        this.richTextBox1.Text = data;
    }
第二种传递请求数据方法
cs 复制代码
   private async void button2_Click(object sender, EventArgs e)
    {
        // PostAsync 发送Post请求,参数1是url,参数2 是FormUrlEncodedContent对象传递数据
        // 1 创建客户端对戏那个发送post异步请求,返回值是响应数据
        HttpResponseMessage res = await new HttpClient().PostAsync("http://192.168.113.74:3000/register",
            // 第二种数据传递的方式
            new StringContent("name=菠萝吹雪222&psw=123456",Encoding.UTF8,"application/x-www-form-urlencoded")
            );
        // 2 获取字符串数据
        string data = await res.Content.ReadAsStringAsync();
        this.richTextBox1.Text = data;
    }

使用 HttpClient类发起POST请求(请求类型为application/json)

请求的格式为json

cs 复制代码
    private async void button3_Click(object sender, EventArgs e)
    {
        HttpResponseMessage res = await new HttpClient().PostAsync(
            "http://192.168.113.74:3000/register",
            // new StringContent 参数1 是json字符串 , 参数2 是utf8编码 , 参数3 请求内容编码格式
            new StringContent("{\"name\":\"菠萝吹雪0011\",\"psw\":\"123456\"}",Encoding.UTF8,"application/json")
            );
    
        string data = await res.Content.ReadAsStringAsync();
        this.richTextBox1.Text = data;
    }

使用 HttpClient类发起POST请求(请求类型为Multipart/Formdata格式)上传文件

Multipart/Formdata格式在上传文件时使用

cs 复制代码
     // 单文件上传
     private async void button1_Click(object sender, EventArgs e)
     {
         // 1 选择文件上传
         OpenFileDialog ofd = new OpenFileDialog();
         if (ofd.ShowDialog() == DialogResult.OK) // 证明已经选择好文件
         {
             // 获取选中文件名称
             string name = ofd.FileName;
    
             // 2 获取文件流
             FileStream fs = new FileStream(name,FileMode.Open);
    
             // 3 组织表单数据
             // new MultipartContent()上传文件设置数据类型(自动设置content-type= Multipart/formdata格式)
             var formData = new MultipartFormDataContent(); // form表单数据对象,通过add方法把表单数据
             // add方法 添加字符串数据   参数1传递值, 参数2是传递参数名
             formData.Add(new StringContent("123"), "username");
             formData.Add(new StringContent("123"), "age");
             // add方法  添加的文件流  参数1对应路径上文件流
             // 参数2存储文件字段名,和后天给定文件名保持一致
             // 参数3文件名 自己随便起的文件名
             formData.Add(new StreamContent(fs),"myFile","李昊轩.png");
    
             // 4 发请求
             HttpResponseMessage res = await Http.Client.PostAsync("http://192.168.113.74:3000/upload",formData);
    
             // 5 获取响应
             string data = await res.Content.ReadAsStringAsync();
             MessageBox.Show(data);
         }
    
     }

使用Get请求下载

以字节形式写入本地

cs 复制代码
    HttpClient Client = new HttpClient();
    private async void button1_Click(object sender, EventArgs e)
    {
        // 1 请求资源
        HttpResponseMessage res = await Client.GetAsync("http://192.168.113.74:3000/托腮.png");
        // 2 如果请求成功了 响应对应的数据
        // 如果没成功了 报异常
        res.EnsureSuccessStatusCode();
        // 3 ReadAsByteArrayAsync 作为字节数组的方式进行异步读取
        byte[] arr = await res.Content.ReadAsByteArrayAsync();
        // 4 把字节数组写入本地
        File.WriteAllBytes(@"2.jpg",arr);
    }
相关推荐
AI科技星2 小时前
数术工坊第八卷:算力革命
c语言·开发语言·网络·量子计算·agi
liulilittle2 小时前
固定数组时间轮的槽过载优化:桶链表与批次执行
网络·数据结构·链表
行走__Wz2 小时前
【网工入门-eNSP模拟-05】静态路由
网络
xiangw@GZ3 小时前
802.11全系列标准调制编码与速率档对应关系
网络·单片机·嵌入式硬件·架构
liulilittle3 小时前
KCC:在 BBR 思路上的一次探索
网络·tcp/ip·算法·bbr·通信·拥塞控制·kcc
27669582924 小时前
泡泡玛特app 腾讯企业加固/支付宝加固脱修frida rpc调用
网络·网络协议·rpc·frida·泡泡玛特·ppmt·泡泡玛特app-rpc调用
其实防守也摸鱼5 小时前
软件安全与漏洞--Windows底层原理与软件逆向工程基础
linux·网络·数据库·算法·安全·安全架构·软件安全与漏洞
薛定猫AI5 小时前
【深度解析】OpenRouter Fusion API 技术拆解:多模型融合架构的能力边界与工程实践
网络·架构
сокол5 小时前
【网安-研判-WireShark流量分析】端口扫描流量分析(高频短连接、SYN 扫描、ICMP 存活探测、扫描 IP / 时段 / 工具指纹)
网络·tcp/ip·wireshark
AI科技星6 小时前
数术宇宙:零一无穷创世史诗
开发语言·网络·量子计算·拓扑学