我正在尝试使用C#
下载此图像http://www.pinkice.com/data/product_image/1/13954Untitled-1.jpg
当我尝试使用WebClient下载它时,我得到一个异常,说底层连接意外关闭。
我已尝试修改标题以模拟chrome
Headers[HttpRequestHeader.Accept] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
Headers[HttpRequestHeader.AcceptLanguage] = "en-US,en;q=0.8";
Headers[HttpRequestHeader.CacheControl] = "max-age=0";
Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.6 (KHTML, like Gecko) Chrome/23.0.1243.2 Safari/537.6";
这不起作用。然后我试着看看它是否适用于wget
wget "http://www.pinkice.com/data/product_image/1/14231Untitled-2.jpg"
导致了
HTTP request sent, awaiting response... No data received. Retrying.
有人可以解决这个问题吗?
答案 0 :(得分:1)
以下代码有效..
using (WebClient wc = new WebClient())
{
wc.Headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1";
byte[] buf = wc.DownloadData("http://www.pinkice.com/data/product_image/1/13954Untitled-1.jpg");
Image bmp = Image.FromStream(new MemoryStream(buf));
}
答案 1 :(得分:0)
问题是我正在使用重用WebClient对象。我认为当If-Modified-Since标头中有一个304 HTTP状态代码时,它会很奇怪地缓存一些东西。故事的道德是不要试图重用WebClient对象。