Виртуальный пользователь XXX вошел во время загрузки файла - PullRequest
1 голос
/ 04 июля 2011

Я использую класс 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 успешно вошел в систему

Ответы [ 3 ]

0 голосов
/ 20 января 2014

Похоже, 2-х шаговый ответ со стороны сервера. Аутентификация (с cookie) и перенаправление в файл.

Подробности можно увидеть при загрузке в браузере с включенной Fiddler. Браузер выполняет перенаправление, и это не сработает при выполнении запроса Http.

Попробуйте сделать запрос с помощью httpWebRequest и контейнера cookie. И вызовите его снова с помощью файла cookie аутентификации.

0 голосов
/ 02 октября 2015

Я думаю, вам нужно сделать два шага: 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;
        }
    }
0 голосов
/ 20 января 2014

Ваш код кажется правильным. Вы пытались вручную загрузить этот файл через веб-браузер (например, IE или chrome) и посмотреть, что он скачивает? Если он все еще получает это, возможно, сервер перенаправляет URL куда-то. Пожалуйста, проверьте.

Просто для справки, минимальный код (без аутентификации и прокси) для загрузки файла.

using (WebClient Client = new WebClient ())
{
    Client.DownloadFile("http://www.abc.com/file/song/a.mpeg", "a.mpeg");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...