C# 下载文件时虚拟用户XXX登录

C# 下载文件时虚拟用户XXX登录,c#,.net,network-programming,webclient-download,C#,.net,Network Programming,Webclient Download,我使用WebClient类从给定URL下载文件。 我正在使用以下功能将其保存在本地服务器上 WebClient wb = new WebClient(); NetworkCredential creds = new NetworkCredential("my username", "my password"); IWebProxy proxy = HttpWebRequest.DefaultWebProxy; wb.Proxy = proxy; wb.Credentials = creds; w

我使用WebClient类从给定URL下载文件。 我正在使用以下功能将其保存在本地服务器上

WebClient wb = new WebClient();
NetworkCredential creds = new NetworkCredential("my username", "my password");
IWebProxy proxy = HttpWebRequest.DefaultWebProxy;
wb.Proxy = proxy;
wb.Credentials = creds;
wb.DownloadFile("source url", "C://downloaded.rpt.rsp");
但经过处理后,目标文件包含

虚拟用户XXX已成功登录


您的代码似乎是正确的。您是否尝试通过IE或chrome等web浏览器手动下载该文件,并查看其下载内容?如果它仍然这样做,可能服务器正在将URL重新定向到某个地方。请检查

仅供参考,最简单的代码没有身份验证和代理下载文件

using (WebClient Client = new WebClient ())
{
    Client.DownloadFile("http://www.abc.com/file/song/a.mpeg", "a.mpeg");
}

这似乎是来自服务器端的两步响应。 使用cookie进行身份验证并重定向到文件

您可以在打开Fiddler的浏览器下载时查看详细信息。浏览器执行重定向,但在执行Http请求时该重定向不起作用


尝试使用httpWebRequest和cookie容器进行请求。然后用身份验证cookie再次调用它。

我认为您需要执行两个步骤,1登录,2下载文件

试试这个:

CookieAwareWebClient wb = new CookieAwareWebClient();
string response = wb.DownloadString("source url"); //should say Virtual user XXX Logged in
wb.DownloadFile("source url", "C://downloaded.rpt.rsp");
确保您正在使用CookieAwareWebClient:

public class CookieAwareWebClient : WebClient
    {
        private readonly CookieContainer m_container = new CookieContainer();

        protected override WebRequest GetWebRequest(Uri address)
        {
            WebRequest request = base.GetWebRequest(address);
            HttpWebRequest webRequest = request as HttpWebRequest;
            if (webRequest != null)
            {
                webRequest.CookieContainer = m_container;
            }
            return request;
        }
    }

这可能是服务器的答案吗?可能是你没有跟踪cookies吗?阿米尔-你有代码示例吗?我尝试了HttpWebRequest,但得到了相同的结果。我也试过Fiddler,但所有的流量都是加密的。