Winform/Caharp中使用HttpClient时添加请求头以及响应文件流实现文件下载

场景

Winform中怎样使用HttpClient调用http的get和post接口并将接口返回json数据解析为实体类:

Winform中怎样使用HttpClient调用http的get和post接口并将接口返回json数据解析为实体类_winform请求http接口_霸道流氓气质的博客-CSDN博客

在上面使用HttpClient调用get以及post接口的基础上,如何在请求接口时添加请求头,

比如接口需要鉴权,获取token之后在其他接口请求时需要添加请求头为获取的token。

以及如果get接口响应为文件流(application/octet-stream),如何请求下载并保存到磁盘具体文件。

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

实现

1、请求添加请求头headers

这里将httpClient声明为全局单例的。

            Global.Instance.httpClient.DefaultRequestHeaders.Clear();
            Global.Instance.httpClient.DefaultRequestHeaders.Add("Authorization", "Basic ttttttfgdfgdfgfdgdf");

所以这里的Global.Instance.httpClient即是httpClient。

添加之前先将之前的进行清理。

2、请求下载文件

接口为get请求,需要传递参数以及添加请求头

            string urlString = textBox_address.Text.Trim() + downloanUrl+ "?allIn=true&dnType=1&version="+versionString;
            Global.Instance.httpClient.DefaultRequestHeaders.Clear();
            Global.Instance.httpClient.DefaultRequestHeaders.Add("Authorization", tokenString);
            Global.Instance.httpClient.DefaultRequestHeaders.Add("Blade-Auth", "bearer " + tokenString);
            DownloadFile(urlString);

这里添加参数直接在url中添加,并且添加了两个请求头。

然后调用下载的方法,方法实现

        /// <summary>
        /// 下载文件并保存到指定目录
        /// </summary>
        /// <param name="url">文件下载地址</param>
        /// <param name="directoryName">文件下载目录</param>
        /// <param name="fileName">不包括扩展名</param>
        /// <returns>下载是否成功</returns>
        public async Task<bool> DownloadFile(string url)
        {
            bool sign = true;
            try
            {
                HttpResponseMessage response = await Global.Instance.httpClient.GetAsync(url);
                using (Stream stream = await response.Content.ReadAsStreamAsync())
                {                
                    using (FileStream fileStream = new FileStream("D:\\test.zip", FileMode.CreateNew))
                    {
                        byte[] buffer = new byte[1000];
                        int readLength = 0;
                        int length;
                        while ((length = await stream.ReadAsync(buffer, 0, buffer.Length)) != 0)
                        {
                            readLength += length;
                            // 写入到文件
                            fileStream.Write(buffer, 0, length);
                        }
                    }
                }
                textBox_log.AppendText("\r\n");
                textBox_log.AppendText("下载成功");
            }
            catch (IOException exception)
            {
                sign = false;
                textBox_log.AppendText("\r\n");
                textBox_log.AppendText("下载失败:"+ exception.Message);
            }
            return sign;
        }

这里不考虑动态传递保存文件路径等参数,以及不考虑异步任务以及进度条显示以及文件过大等情况,

只是简单实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霸道流氓气质

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值