C# скачать файл из Интернета

Есть ли способ заставить следующую функцию работать через прокси?

public T[] ReadStream(System.IO.TextReader reader);

Я хочу быть в состоянии прокси reader например, чтобы он мог загрузить файл из Интернета при попытках чтения и кэшировать его где-нибудь.

Или, может быть, для этого есть что-то по умолчанию?

3 ответа

Решение

Используйте WebClient.DownloadFile. Если вам нужен прокси, вы можете установить свойство Proxy вашего объекта WebClient.

Вот пример:

using (var client = new WebClient())
{
    client.Proxy = new WebProxy("some.proxy.com", 8000);
    client.DownloadFile("example.com/file.jpg", "file.jpg");
}

Вы также можете скачать файл по частям с помощью BinaryReader:

using (var client = new WebClient())
{
    client.Proxy = new WebProxy("some.proxy.com", 8000);

    using (var reader = new BinaryReader(client.OpenRead("example.com/file.jpg")))
    {
        reader.ReadByte();
        reader.ReadInt32();
        reader.ReadBoolean();

        // etc.
    }
}

Возможно, это то, что вы хотите? Меня также немного смущает формулировка вопроса, учитывая ваши комментарии к предыдущему ответу.

public StreamReader GetWebReader(string uri)
{
    var webRequest = WebRequest.Create(uri);
    var webResponse = webRequest.GetResponse();
    var responseStream = webResponse.GetResponseStream();
    return new StreamReader(responseStream);
}
var webRequestObject = (HttpWebRequest) WebRequest.Create("http://whatever");
var response = webRequestObject.GetResponse();
var webStream = response.GetResponseStream();
// Ta-da.
var reader = new StreamReader(webStream);
Другие вопросы по тегам