HTTP协议——HttpClient请求类

avatar
作者
筋斗云
阅读量:2

HttpClient请求类

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

使用 HttpClient类发起GET请求

    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)

请求的格式为原生表单

第一中传递请求数据方法
    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;     }
第二种传递请求数据方法
   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

    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格式在上传文件时使用

     // 单文件上传      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请求下载

以字节形式写入本地

    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);     }

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!