2

有没有办法通过代理使以下功能工作?

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

我希望能够代理该reader实例,以便它可以在读取尝试时从网络下载文件并将其缓存在某处。

或者也许为此目的有一些默认值?

4

3 回答 3

8

使用 WebClient.DownloadFile。如果需要代理,可以设置 WebClient 对象的 Proxy 属性。

这是一个例子:

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.
    }
}
于 2011-04-08T21:47:45.300 回答
1

也许这就是你想要的?考虑到您对上一个答案的评论,我也对问题的措辞感到有些困惑。

public StreamReader GetWebReader(string uri)
{
    var webRequest = WebRequest.Create(uri);
    var webResponse = webRequest.GetResponse();
    var responseStream = webResponse.GetResponseStream();
    return new StreamReader(responseStream);
}
于 2011-04-08T22:20:06.717 回答
0
var webRequestObject = (HttpWebRequest) WebRequest.Create("http://whatever");
var response = webRequestObject.GetResponse();
var webStream = response.GetResponseStream();
// Ta-da.
var reader = new StreamReader(webStream);
于 2011-04-08T22:14:49.330 回答