C # скачать файл из Интернета - PullRequest
2 голосов
/ 09 апреля 2011

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 09 апреля 2011

Использовать 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.
    }
}
1 голос
/ 09 апреля 2011

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

public StreamReader GetWebReader(string uri)
{
    var webRequest = WebRequest.Create(uri);
    var webResponse = webRequest.GetResponse();
    var responseStream = webResponse.GetResponseStream();
    return new StreamReader(responseStream);
}
0 голосов
/ 09 апреля 2011
var webRequestObject = (HttpWebRequest) WebRequest.Create("http://whatever");
var response = webRequestObject.GetResponse();
var webStream = response.GetResponseStream();
// Ta-da.
var reader = new StreamReader(webStream);
...