下载文件-请求别人的接口,下载文件并保存

public static string DownFileByHttpRes(string url, Dictionary<string, string> paras,string path)
{

        try
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
                                    | SecurityProtocolType.Tls
                                    | (SecurityProtocolType)0x300 //Tls11
                                    | (SecurityProtocolType)0xC00 //Tls12
                                    | (SecurityProtocolType)3072;
            var request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/json;charset=UTF-8";
            request.KeepAlive = false;
            request.ProtocolVersion = HttpVersion.Version10;
            request.Accept = "*/*";
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)";
            Encoding encoding = Encoding.UTF8;//根据网站的编码自定义
            string responseData = String.Empty;
            if (Regex.IsMatch(url, "^https://"))
            {
                request.KeepAlive = false;

                ServicePointManager.Expect100Continue = true;
                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
                                   | SecurityProtocolType.Tls
                                   | (SecurityProtocolType)0x300 //Tls11
                                   | (SecurityProtocolType)0xC00 //Tls12
                                   | (SecurityProtocolType)3072;
                request.ProtocolVersion = HttpVersion.Version10;
            }
            
            //如果报文体不为空
            if (paras != null)
            {
                string postData = Newtonsoft.Json.JsonConvert.SerializeObject(paras);
                var data = Encoding.UTF8.GetBytes(postData);
                request.ContentLength = data.Length;
                using (var stream = request.GetRequestStream())
                {
                    stream.Write(data, 0, data.Length);
                }

            }
          

            HttpWebResponse response = request.GetResponse() as HttpWebResponse;

            string filename = HttpUtility.UrlDecode(response.GetResponseHeader("Content-Disposition").Split(';')[1].Split('=')[1], System.Text.Encoding.UTF8);
            string filePath = path + "\\" + filename;
            if (File.Exists(filePath))
            {
                File.Delete(filePath);
            }
            FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
            //直到request.GetResponse()程序才开始向目标网页发送Post请求
            Stream responseStream = response.GetResponseStream();
            //创建本地文件写入流
            byte[] bArr = new byte[1024];
            int iTotalSize = 0;
            int size = responseStream.Read(bArr, 0, (int)bArr.Length);
            while (size > 0)
            {
                iTotalSize += size;
                fs.Write(bArr, 0, size);
                size = responseStream.Read(bArr, 0, (int)bArr.Length);
            }
            fs.Close();
            responseStream.Close();
            return filePath;
        }
        catch (Exception)
        {

            throw;
        }

    }
posted @   谢大山啊  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示