首页 > 其他分享 >Winform/Caharp中使用HttpClient时添加请求头以及响应文件流实现文件下载

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

时间:2023-04-05 14:12:50浏览次数:62  
标签:文件 请求 Global Instance 添加 Caharp Winform httpClient

场景

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

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/124157296

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

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

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

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi

实现

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

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

只是简单实现。

 

标签:文件,请求,Global,Instance,添加,Caharp,Winform,httpClient
From: https://www.cnblogs.com/badaoliumangqizhi/p/17289353.html

相关文章

  • 如何把多个文件(夹)向下移动1层(在复制前或后进行)
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z 先看一下文件夹的结构,一共4个文件夹,1-4编号,每个里面都有兔兔的图片,作为操作说明(实际就按自己要处理的文件)打开工具,切换到“文件批量复制”的版块思路:先把4个文件夹拖入到“来源路径”里,整理一下,去掉1......
  • 如何从多个文件夹内转移全部文件(忽略文件夹的结构)(进行复制)(再打包)
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z 04文件夹里面有只有1个名称为"1"的文件夹,“1”里面有“2”,“2”有“3”,“3”有“4”,从“1”开始,都有5个兔兔的图片,这是“1”里面的文件夹结构,现在要做的就是忽略文件夹结构,提取出全部的兔兔图片合并成一个压缩......
  • 在windows下通过xshell来实现跳板机配置pycharm环境和xftp文件访问
    xshell实现跳板机先使用xshell实现跳板机,并将对应的跳板机窗口打开。跳板机使用xshell的隧道功能实现,选择作为中转的服务器B的属性。选择隧道选择添加侦听端口为本机A的,后面通过localhost:7777进行访问。这个端口可以自己设置不同的。目标主机就是通过服务器B作为跳板机,要......
  • 关于python中使用json.load()从json文件中读取数据转换成字典
    在json模块中,我们可以经常会用到load()与loads(),其中两者的区别如下json.load()从json文件中读取数据转抱为dict类型json.loads()将str类型的数据转换为dict类型这里笔者主要说明json.load()的用法,举例说明,如下有一json文件,ip-ranges.json,内容如下:这里我们将使用json.load(......
  • asp.net core 生成文件下载
    1publicIActionResultdown(intid,stringfilename)2{3stringpath=hostingEnvironment.WebRootPath+"/ContractFiles/"+id+"/"+filename;456varcontentType="APPLICA......
  • yaml-cpp YAML格式处理库的介绍和使用(面向业务编程-文件格式处理)
    yaml-cppYAML格式处理库的介绍和使用(面向业务编程-文件格式处理)YAML格式介绍YAML的格式介绍,有关ini、json和xml或许很多人已经很了解了,但是关于YAML,还有许多人不了解。YAML被设计成更适合人类阅读(我想正因为如此,所以相对来说更灵活,就导致到使用的时候很多人会觉得它看起来并不......
  • Linux scp 服务器间文件复制
    备注:ngnix配置文件:/usr/local/nginx/conf/nginx.conf可配置前后端路径、文件下载路径前提:两台服务器可以ping通过把所在服务器的文件复制到10.1.3.155上格式:scp-r所在服务器:所在服务器文件目标服务器:目标服务器文件1、复制文件scp/qms/[email protected].......
  • JavaWeb——HTML基本标签详解及案例实战(文件标签、文本标签、图片标签、列表标签、链
    目录1、文件标签2、文本标签3、图片标签4、列表标签5、链接标签6、块标签7、语义化标签8、表格标签9、综合案例上一节介绍了HTML的基本概念,和基本语法,本节介绍下HTML的基本标签和表单标签。这部分学习可以参照W3Cschool,一个很好的网站。1、文件标签文件标签是构成HTML最基本的标签,......
  • python3里面实现将日志文件写入当前脚本运行的文本中
    在Python3中,可以使用logging模块来实现将日志写入本地文本文件中。下面是一个简单的示例代码:importlogging#配置logging模块logging.basicConfig(level=logging.DEBUG,filename='example.log',format='%(asctime)s%(leve......
  • AltiumDesigner导入AutoCAD文件DXF,DWG格式
    这里有一篇关于导入DXF的文章,方法还可以。文章......