WebClient DownloadFile与授权无法正常工作

时间:2016-07-21 18:12:28

标签: c# download authorization webclient webclient-download

我已经尝试了一切我能想到的工作,包括我在网上找到的一些东西。我要做的就是从我必须登录的网站下载一个文件(有直接链接)。

我尝试使用“UploadValues”执行以下操作:

            WebClient myWebClient = new WebClient();
            NameValueCollection myNameValueCollection = new NameValueCollection();
            myNameValueCollection.Add("username", this.UserName);
            myNameValueCollection.Add("password", this.Password);
            byte[] responseArray = myWebClient.UploadValues(felony, myNameValueCollection);
            myWebClient.DownloadFile(felony, localfelony);

我也尝试将登录信息放在标题中。我也尝试过设置凭据,您可以从评论代码中看到:

            WebClient client = new WebClient();
            //client.UseDefaultCredentials = false;
            //client.Credentials = new NetworkCredential(this.UserName, this.Password);
            client.Headers.Add(HttpRequestHeader.Authorization, "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(this.UserName + ":" + this.Password)));
            client.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36");
            //client.Headers.Add(HttpRequestHeader.Cookie, this.webBrowser.Document.Cookie);
            client.DownloadFile(felony, localfelony);

无论我尝试什么,我唯一可以下载的是一个最终成为登录页面的文件,好像它不接受我通过的登录信息。

我看过标题等等,我没有看到任何与众不同的东西,这可以解释为什么这不起作用。有任何想法吗?感谢。

3 个答案:

答案 0 :(得分:1)

我可以发誓我以前尝过这个,但我想也许我只是有点不同或者什么。所以它的工作原理如下:

            WebClient client = new WebClient();
            client.UseDefaultCredentials = false;
            client.Credentials = new NetworkCredential(this.UserName, this.Password);
            client.Headers.Add(HttpRequestHeader.Cookie, "_gat=1; b46467afcb0b4bf5a47b2c6b22e3d284=mt84peq7u4r0bst72ejs5lb7p6; https://docs.stlucieclerk.com/=1,1; _ga=GA1.2.12049534.1467911267");
            client.DownloadFile(webaddress, localname);

标题中的cookie使其正常工作。我之前认为我已经这样做了,但也许我做了一些涉及不同的cookie的事情。

答案 1 :(得分:0)

这似乎是一个身份验证/授权问题。

造成这种情况的原因可能有很多: 1)可能是认证/授权机制使用某种哈希。 2)可能是您使用了错误的身份验证机制(我可以看到“基本”)。 3)您可能正在接受身份验证但未获得授权。

找到根本原因的最佳方法是: 使用Fiddler。 使用UI页面登录并尝试下载该文件。这样做可以捕捉到小提琴会话。无论你有什么代码,都会尝试做同样的事情。再次捕捉小提琴会话。比较小提琴手找到差异。

希望这有帮助。

答案 2 :(得分:0)

尝试暂时更改证书验证:

System.Net.Security.RemoteCertificateValidationCallback r = System.Net.ServicePointManager.ServerCertificateValidationCallback; System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object s, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) { return true; }; //Do downloading here... System.Net.ServicePointManager.ServerCertificateValidationCallback = r;

然而,这意味着webclient会接受任何证书,因此请参阅this发布以获取更多信息。