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

本文关键字:文件 登录 下载 用户 XXX 虚拟 | 更新日期: 2023-09-27 18:01:08

我使用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成功登录

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

您的代码似乎是正确的。你有没有尝试通过网络浏览器(如IE或chrome(手动下载该文件,看看它下载了什么?如果它仍然得到了,也许服务器正在将URL重定向到某个地方。plz检查。

仅供参考,下载文件的最小代码(无需身份验证和代理(。

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;
        }
    }