首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebClient DownloadFile访问被拒绝

WebClient DownloadFile访问被拒绝
EN

Stack Overflow用户
提问于 2016-01-22 15:46:00
回答 3查看 3.2K关注 0票数 0

我试图将文件下载到服务器,但数据却被写入错误。请告诉我出了什么问题。当我在"http://localhost:xxx“上使用这段代码时,一切都很正常。WebClient myWebClient = new WebClient(); myWebClient.DownloadFile(remoteUri, Server.MapPath("~/test/" + "test.xml"));

我更新了我的问题。下面是我的完整代码:

代码语言:javascript
复制
string path1 = "certificate1.p12";
string path2 = "certificate2.crt";
X509Certificate2 cert1 = new X509Certificate2(Server.MapPath(("~/test/") + path1), "", X509KeyStorageFlags.MachineKeySet);
X509Certificate2 cert2 = new X509Certificate2(Server.MapPath(("~/tets/") + path2));
CertificateWebClient2 myWebClient = new CertificateWebClient2(cert1, cert2);
string remoteUri = "https://xxxxx";
string path = "test.xml";
myWebClient.UseDefaultCredentials = true;
myWebClient.DownloadFile(remoteUri, Server.MapPath((@"~/Files/") + path));


public class CertificateWebClient : WebClient
{
    private readonly X509Certificate2 certificate1;
    private readonly X509Certificate2 certificate2;

    public CertificateWebClient(X509Certificate2 cert1, X509Certificate2 cert2)
    {
        certificate1 = cert1;
        certificate2 = cert2;
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
        System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(Object obj, X509Certificate X509certificate, X509Chain chain, System.Net.Security.SslPolicyErrors errors)
        {
            return true;
        };

        request.ProtocolVersion = HttpVersion.Version10;
        request.Method = "Post";
        request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";
        request.ContentType = "application/x-www-form-urlencoded";
        request.UseDefaultCredentials = true;
        request.ContentLength = 0;
        request.ClientCertificates.Add(certificate1);
        request.ClientCertificates.Add(certificate2);
        return request;
    }
}
EN

回答 3

Stack Overflow用户

发布于 2016-01-22 17:36:24

检查下载是否被您的代理服务器阻止。如果是,请使用以下代码:

代码语言:javascript
复制
using (var webClient = new WebClient())
{
    //  Obtain the 'Proxy' of the  Default browser.
    IWebProxy webProxy = webClient.Proxy;

    if (webProxy != null)
    {
        // Use the default credentials of the logged on user.
        webProxy.Credentials = CredentialCache.DefaultCredentials;
    }

   // Do stuff
}
票数 1
EN

Stack Overflow用户

发布于 2016-01-22 15:49:21

我想您没有使用凭据。当您使用浏览器加载时,它会自动附加它,但不会附加到When客户端。

因此您需要使用默认凭据。https://msdn.microsoft.com/en-us/library/system.net.webclient.usedefaultcredentials(v=vs.110).aspx

但是web服务器应该使用正确的用户。

票数 0
EN

Stack Overflow用户

发布于 2016-01-22 15:56:18

尝试使用默认凭据。

代码语言:javascript
复制
WebClient myWebClient = new WebClient { UseDefaultCredentials = true };
myWebClient.DownloadFile(remoteUri, Server.MapPath("~/test/" + "test.xml"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34941506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档