从网页中下载图片遇到的坑
来源:互联网 发布:macbook pro软件推荐 编辑:程序博客网 时间:2024/05/16 12:55
在使用C#编写程序从普通的网页下载图片往往是这样的:
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(imageurl));
using (WebResponse response = request.GetResponse()) { using (Stream resStream = response.GetResponseStream()) { System.Drawing.Image img; img = System.Drawing.Image.FromStream(resStream); img.Save(savePath); } }
或者:
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(imageurl)); using (WebResponse response = request.GetResponse()) { using (Stream resStream = response.GetResponseStream()) { using (FileStream writer = new FileStream(savePath, FileMode.OpenOrCreate, FileAccess.Write)) { byte[] buff = new byte[1024]; int c = 0; //实际读取的字节数 while ((c = resStream.Read(buff, 0, buff.Length)) > 0) { writer.Write(buff, 0, c); } } } }
但是如果对方网站如果有简单校验的话可能需要我们模拟普通用户的操作,以绕过对方的验证,一般是添加Referer和User-Agent
request.Referer = imageurl; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36";
当然也可能对方网站还有其他参数的校验,可以根据浏览器中的header添加到请求中
还有一种情况,如果对方图片采用了gzip压缩http://news.xinhuanet.com/english/photo/2016-08/24/135630565_14720447384671n.jpg),需要我们先解压然后保存文件,否则会导致图片损坏(用第一种方式的话会在
System.Drawing.Image.FromStream(resStream);这个位置抛异常,因为不是一个有效的图片流,第二种方式的话会是一个损坏的图片)
解压代码为:
Stream resStream = response.GetResponseStream(); if (response.Headers[HttpResponseHeader.ContentEncoding] != null && response.Headers[HttpResponseHeader.ContentEncoding].ToLower().Contains("gzip")) { resStream = new GZipStream(resStream, CompressionMode.Decompress); }
0 0
- 从网页中下载图片遇到的坑
- 如何从网页中下载图片
- [python][爬虫]从网页中下载图片
- 网页中链接中图片的下载
- 利用jsoup 如何从网页中下载图片
- 实现从网上下载大量图片在GridView上显示过程中遇到的一些问题
- 随便写的一个python小程序,从网页中下载图片
- 自己写个从网页里下载图片的程序
- 从指定网页自动下载其中所有的图片
- 从网页中获取图片
- VC 从网页上下载图片
- VC 从网页上下载图片
- 如何从含有视频的网页中下载视频
- 异步下载图片小项目中遇到的问题总结
- 从手机中获取图片遇到的OOM问题解析
- python爬虫一:必应图片(从网页源代码中找出图片链接然后下载)
- 从临时文件中下载网页视频
- 自己写的从网页上获取并下载图片的方法
- 从零开始学习Skynet_examples研究
- java的HashTable的部分源码分析
- LFS 中文版手册发布:如何打造自己的 Linux 发行版
- hello
- 用汉明距离进行图片相似度检测的Java实现
- 从网页中下载图片遇到的坑
- 如何撰写软件详细设计内容?
- Vim一些常用命令
- 使用Websocket实现消息推送(上)
- C++使用libcurl做HttpClient
- php56w的rpm源
- Server returned HTTP response code: 500
- MPush开源消息推送系统:简洁、安全、支持集群
- 网络通信之UDP