HTTP下载文件

有些网站的文件,使用程序进行下载,需要注意header。下面是一个例子。

如果不加入下面2行,就无法下载。很多网站是通过Referer防止盗链的。

req.Host = "hldqrcode1.oss-cn-shanghai.aliyuncs.com";

req.Referer = "https://www.ecustpress.cn/";

cs 复制代码
      public static string HttpProc_sessionid(string url, string fn,  ref string err)
        {
            err = "";
            try
            {
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
                req.Timeout = 1000 * 30;
                req.Method = "GET";
                req.AllowAutoRedirect = true;
                req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9";
                req.Headers.Add("Accept-Encoding", "identity;q=1, *;q=0");
                req.Headers.Add("Accept-Language", "zh-CN,zh;q=0.9");
                req.Headers.Add("Cache-Control", "max-age=0");
                req.KeepAlive = true; 
                req.Host = "hldqrcode1.oss-cn-shanghai.aliyuncs.com";
                // req.Headers.Add("Range", "bytes=0-");
                req.Referer = "https://www.ecustpress.cn/";
                req.Headers.Add("Sec-Fetch-Dest", "document");
                req.Headers.Add("Sec-Fetch-Mode", "navigate");
                req.Headers.Add("Sec-Fetch-Site", "none");
                req.Headers.Add("Sec-Fetch-User", "?1");
                req.Headers.Add("Upgrade-Insecure-Requests", "1");
                req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62";
                req.Headers.Add("sec-ch-ua", @""".Not/A)Brand"";v=""99"", ""Microsoft Edge"";v=""103"", ""Chromium"";v=""103""");
                req.Headers.Add("sec-ch-ua-mobile", "?0");
                req.Headers.Add("sec-ch-ua-platform", @"""Windows""");
                req.ProtocolVersion = HttpVersion.Version11;
                req.CookieContainer = new CookieContainer();


                //Cookie c1 = new Cookie("PHPSESSID",
                //sessionid, "/", req.Host);
                //req.CookieContainer.Add(c1);

                using (WebResponse wr = req.GetResponse())
                {
                    MemoryStream ms = new MemoryStream();
                    wr.GetResponseStream().CopyTo(ms);
                    System.IO.File.WriteAllBytes(fn, ms.ToArray());
                    return fn;
                }
            }
            catch (Exception e)
            {

                err = e.Message;
                return "";
            }

        }

对于HTTPS,还需要响应证书的检查。

public static bool inited = init();

public static bool init()

{

X509Certificate certificate = new X509Certificate();

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);

System.Net.ServicePointManager.DefaultConnectionLimit = 512;

return true;

}

private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)

{

return true;

}

cs 复制代码
        public static bool inited = init();
        public static bool init()
        {
            X509Certificate certificate = new X509Certificate();
            ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);

            System.Net.ServicePointManager.DefaultConnectionLimit = 512;
            return true;
        }
        private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
        {
            return true;
        }
相关推荐
TlSfoward1 小时前
TLS指纹库的数据质量与误判治理 TLSFOWARD TLS指纹库
爬虫·网络协议·http
格林威1 小时前
C#图像像素放大:邻域平均、双线性插值实现像素放大的C#实现代码
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
嵌入式阿蔡2 小时前
传感器_02:MPU6050 六轴 IMU 姿态入门——从一串看不懂的数,到一个不漂的角度
网络·stm32·单片机·嵌入式硬件·嵌入式实时数据库
阿 才2 小时前
Matlab(Simulink)使用详解
运维·网络·matlab
MartinYeung52 小时前
[论文学习]δ-STEAL:基于本地差分隐私的大语言模型窃取攻击
网络·学习·语言模型
乐橙开放平台2 小时前
监控开放平台是什么?从设备接入到视频能力开放一次讲清
网络·人工智能·音视频
云深处@2 小时前
【Linux】UDP套接字---执行指令
网络
Shell运维手记2 小时前
Linux (挂载|rpm|yum|源码编译)
linux·运维·笔记·网络协议·bash
ITyunwei09872 小时前
SSL 证书过期排查实战:openssl + Nginx 4步从发现到续签
运维·网络
SendTomo2 小时前
send.wang(私传网)基于网页P2P直连传输大文件的优势
javascript·网络·webrtc·html5·p2p