首页 > 其他分享 >HTTP协议——HttpClient请求类

HTTP协议——HttpClient请求类

时间:2024-07-17 15:28:51浏览次数:16  
标签:HTTP 请求 res await new data HttpClient

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

标签:HTTP,请求,res,await,new,data,HttpClient
From: https://blog.csdn.net/qq_3517289697/article/details/140495686

相关文章

  • C# Http访问帮助类
    1publicclassHttpHelper2{3///<summary>4///HttpWebRequest通过Post5///</summary>6///<paramname="url">URI</param>7///<paramname="postD......
  • Python爬虫Post请求返回值为-1000
    今天写了一个简单的爬虫程序,为了爬取kfc官网的餐厅数据,代码如下#ajax的post请求--肯德基官网defcreate_request(page):url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx'data={ 'cname':'濮阳', 'pid':'', 'pageIndex':p......
  • js需要同时发起百条接口请求怎么办?--通过Promise实现分批处理接口请求
    如何通过Promise实现百条接口请求?实际项目中遇到需要发起上百条Promise接口请求怎么办?前言不知你项目中有没有遇到过这样的情况,反正我的实际工作项目中真的遇到了这种玩意,一个接口获取一份列表,列表中的每一项都有一个属性需要通过另一个请求来逐一赋值,然后就有了这份封装真......
  • HTTP服务工具类,包括带参数的 post/http get/http get 方法
    1、导入maven依赖<!--apachehttpclient客户端工具包--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.3</version>......
  • 安防视频监控EasyCVR平台浏览器http可以播放,https不能播放,如何解决?
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构,兼容性强、支持多协议接入,包括国标GB/T28181协议、部标JT808、GA/T1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SDK等。平台能对外分发RTMP、RT......
  • RabbitMQ 安装并成功启动后,无法访问http://127.0.0.1:15672/#/
    1.问题描述&解决:安装了最新版RabbitMQ,然后先正常启动也无法访问,然后网上搜呀搜,什么重启服务,使用管理员打开cmd,或者是使用管理员运行下图的RabbitMQservice-start,最后又尝试了rabbitmq-pluginsenablerabbitmq_management这个命令,都无法在火狐浏览器打开http://127.0.0.1:1......
  • 配置 Ubuntu上的 HTTP 服务器(Apache)
    前言如果文件放在VM2上,想在VM1上进行访问,就可以在VM2配置HTTP服务器。最后在VM1的网页访问VM2的文件。1.安装ApacheHTTP服务器:sudoaptupdatesudoaptinstallapache22.确保Apache已启动并设置为开机启动:sudosystemctlstartapache2sudosystemctlenablea......
  • nginx生成自签名SSL证书配置HTTPS
    一、安装nginxnginx必须有"--with-http_ssl_module"模块查看nginx安装的模块:root@ecs-7398:/usr/local/nginx#cd/usr/local/nginx/root@ecs-7398:/usr/local/nginx#./sbin/nginx-Vnginxversion:nginx/1.20.2builtbygcc9.4.0(Ubuntu9.4.0-1ubuntu1~20.04.2)......
  • 面试官:Dubbo一次RPC请求经历哪些环节?
    大家好,我是三友~~今天继续探秘系列,扒一扒一次RPC请求在Dubbo中经历的核心流程。本文是基于Dubbo3.x版本进行讲解一个简单的Demo这里还是老样子,为了保证文章的完整性和连贯性,方便那些没有使用过的小伙伴更加容易接受文章的内容,这里快速讲一讲Dubbo一个简单的Demo如果你已经......
  • HTTP请求的发送:构建与传输的详细剖析
    摘要在网络通信的世界里,HTTP(超文本传输协议)是构建Web应用的基石。HTTP请求是客户端与服务器通信的语言。本文将深入探讨HTTP请求的发送过程,从构建请求到通过TCP/IP协议栈传输的每个细节。1.HTTP请求概述介绍HTTP请求的基本概念和作用。解释HTTP请求与响应的通信模式。2......