Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从nseindia.com下载https文件?_C#_.net_Webclient - Fatal编程技术网

C# 如何从nseindia.com下载https文件?

C# 如何从nseindia.com下载https文件?,c#,.net,webclient,C#,.net,Webclient,我尝试了以下代码。收到的错误是“基础连接已关闭:接收时发生意外错误” 系统操作系统:Windows 7 Home Basic SP1 .net版本:4.5.2 using System; using System.Net; using System.Net.Security; namespace wc_downloadfile { class Program { public static void Main(string[] args) {

我尝试了以下代码。收到的错误是“基础连接已关闭:接收时发生意外错误”

系统操作系统:Windows 7 Home Basic SP1 .net版本:4.5.2

using System;
using System.Net;
using System.Net.Security;

namespace wc_downloadfile
{
    class Program
    {
        public static void Main(string[] args)
        {

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

            using(WebClient wc = new WebClient())
            {
                string src = "https://nseindia.com/content/indices/ind_nifty50list.csv";
                string dest = @"C:\temp\N50.csv";
                try
                {
                    var ua = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36";
                    wc.Headers.Add(HttpRequestHeader.UserAgent, ua);

                    wc.Headers.Add(HttpRequestHeader.Accept, "*/*");
                    wc.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");

                    wc.DownloadFile(src, dest);

                }
                catch (Exception e)
                {

                    Console.WriteLine("Unable to download file  --- " + e.Message);
                }

            }
            Console.ReadKey(true);
        }
    }
}

修改了用户代理值,问题得到解决。以下是工作代码

using System;
using System.Net;
using System.Net.Security;

namespace wc_downloadfile
{
    class Program
    {
        public static void Main(string[] args)
        {

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

            using(WebClient wc = new WebClient())
            {
                string src = "https://nseindia.com/content/indices/ind_nifty50list.csv";
                string dest = @"C:\temp\N50.csv";
                try
                {
                    //Removed Chrome/61.0.3163.100
                    var ua = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36";
                    wc.Headers.Add(HttpRequestHeader.UserAgent, ua);

                    wc.Headers.Add(HttpRequestHeader.Accept, "*/*");

                    wc.DownloadFile(src, dest);

                }
                catch (Exception e)
                {

                    Console.WriteLine("Unable to download file  --- " + e.Message);
                }

            }
            Console.ReadKey(true);
        }
    }
}

删除此项:
wc.Headers.Add(HttpRequestHeader.AcceptEncoding,“gzip,deflate”)
或创建自定义WebClient,获取HttpWebRequest并设置
[HttpWebRequest].AutomaticDecompression=DecompressionMethods.GZip | DecompressionMethods.Deflate(或直接使用WebRequest/HttpClient)@Jimi。非常感谢。关于编码,您的评论很有价值。然而,这并不能解决问题。用户代理“Chrome/61.0.3163.100”导致了该问题。是的,可能会发生这种情况。如果您在标题中传递的浏览器版本支持此功能,有时网站会启用此功能并等待交互,WebRequest不支持此功能。作为建议,如果您只需要下载一个文件,请使用IE11头文件:
Mozilla/5.0(Windows NT 6.1;WOW64;Trident/7.0;rv:11.0),就像Gecko一样“
。它不会触发任何有关编码的
高级功能:):这与编码无关,而是与压缩算法有关。但是,编码也可能有问题,因为WebClient使用默认编码,即未指定任何编码。如果您有编码问题(您的文本看起来乱七八糟),请参阅此处的注释:使用WebResponse的编码。您可以添加一些关于此代码如何解决问题的描述吗?@Pratap Deshmukh。非常感谢。在你的回答中提到了用户代理,我能够解决这个问题。请阅读关于这个问题的评论。您使用了错误的/非官方的标题,因此您的用户代理有点未知/未定义。这些是实际的Chrome标头:。
using System;
using System.Net;
using System.Net.Security;

namespace wc_downloadfile
{
    class Program
    {
        public static void Main(string[] args)
        {

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

            using(WebClient wc = new WebClient())
            {
                string src = "https://nseindia.com/content/indices/ind_nifty50list.csv";
                string dest = @"C:\temp\N50.csv";
                try
                {
                    //Removed Chrome/61.0.3163.100
                    var ua = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36";
                    wc.Headers.Add(HttpRequestHeader.UserAgent, ua);

                    wc.Headers.Add(HttpRequestHeader.Accept, "*/*");

                    wc.DownloadFile(src, dest);

                }
                catch (Exception e)
                {

                    Console.WriteLine("Unable to download file  --- " + e.Message);
                }

            }
            Console.ReadKey(true);
        }
    }
}