C# 从未知格式下载图像

标签 c# html http

我正在使用批量下载器,但有些 URL 没有正确发送数据。

例如,此页面:http://i.imgbox.com/absMQK6A.png

在任何互联网浏览器中,此页面显示图像,但在我的程序中,下载奇怪的数据。 我认为这个 URL 是假的或 protected (我不太了解 HTML。)

顺便说一句,在 IE 中,我可以通过右键单击并另存为图像来正常下载该图像。 所以我想在我的程序中模拟这种行为。

我该怎么做?

下面是我的程序代码的一部分。

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(DownloadAddress);
if (Proxy != null)
{
    request.Proxy = Proxy;
}
if (!string.IsNullOrWhiteSpace(UserAgent))
{
    request.UserAgent = UserAgent;
}

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream downloadHttpStream = response.GetResponseStream();
int read = downloadHttpStream.Read(buffer, 0, buffer.Length);
// output codes

UserAgent 是包含浏览器信息的字符串。 如IE、Firefox等

谢谢。

最佳答案

如果您查看通过代码返回的数据的前几个字节,您会发现它以 1F 8B 08 开头。 This indicates数据是 gzip 压缩数据(gzip 编码在网络上很常见)。您可以包括 AutomaticDecompression属性使 .Net 代码自动解压缩此数据并获取有效的 PNG (字节以 89 50 4E 47 开头):

var request = (HttpWebRequest)HttpWebRequest.Create(DownloadAddress);
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

关于C# 从未知格式下载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23273608/

相关文章:

html - 如何以水平形式组合输入和跨度?

html - 我们如何在 Ionic 2 中单击另一个选项卡菜单应用程序图标时隐藏一个选项卡?

iphone - Objective-C,iPhone如何依次播放来自不同URL的音频文件?

ajax - 从angularjs发送数据到django

c# - 具有 protected 属性 setter 的对象 XmlSerialization

c# - XML 文档中的多语言示例

c# - 使用 C# 将多个文档插入 Mongodb 的最快方法

html - 网页在 chrome 中正确显示,而不是在 firefox 中

php - C++ 从 http 下载二进制文件

c# - 如何使用泛型的底层泛型类型 C#