首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用.webp从url下载C#图像

使用.webp从url下载C#图像
EN

Stack Overflow用户
提问于 2021-02-06 01:03:56
回答 2查看 1.3K关注 0票数 1

我正在尝试从

http://aplweb.soriana.com/foto/fotolib/14/7503003936114/7503003936114-01-01-01.jpg

使用WebClient。

当我以Chrome浏览器浏览图像时,图像就在那里:

url以.jpg结尾,但图像以.WEBP格式结束。

代码语言:javascript
复制
    using (WebClient wb = new WebClient())
    {                  
         wb.DownloadFile("http://aplweb.soriana.com/foto/fotolib//14/7503003936114/7503003936114-01-01-01.jpg", "image.jpg");
    }

我已经尝试过.DownloadData()、异步方法、HttpClient、WebRequest直接..我总是犯同样的错误。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-06 01:26:30

您的代码很好,但这是一个特定于服务器的行为。添加一些请求头可以解决这个问题。

下面是一个使用HttpClient的示例

代码语言:javascript
复制
class Program
{
    private static readonly HttpClient client = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate });

    static async Task Main(string[] args)
    {
        client.DefaultRequestHeaders.Accept.ParseAdd("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        client.DefaultRequestHeaders.AcceptEncoding.ParseAdd("gzip, deflate");
        try
        {
            Console.WriteLine("Downloading...");
            byte[] data = await client.GetByteArrayAsync("http://aplweb.soriana.com/foto/fotolib//14/7503003936114/7503003936114-01-01-01.jpg");
            Console.WriteLine("Saving...");
            File.WriteAllBytes("image.jpg", data);
            Console.WriteLine("OK.");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

控制台输出

代码语言:javascript
复制
Downloading...
Saving...
OK.

下载图像

票数 4
EN

Stack Overflow用户

发布于 2021-02-06 01:47:46

服务器似乎只为支持压缩的请求提供服务。WebClient不支持自动压缩。您可以通过继承您自己的类(如this answer中所述)来启用对压缩的支持。

代码语言:javascript
复制
class MyWebClient : WebClient
{
    protected override WebRequest GetWebRequest(Uri address)
    {
        HttpWebRequest request = base.GetWebRequest(address) as HttpWebRequest;
        request.AutomaticDecompression =  DecompressionMethods.Deflate | DecompressionMethods.GZip;
        return request;
    }
}

然后使用MyWebClient而不是WebClient

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66072583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档