今天在下载一个网站的图片时,提示403 Forbidden,对方服务器是使用了https证书的。

   我是用的WebClient去下载的,当时写的代码就是简单的声明和下载

   

WebClient client = new WebClient();
var result = client.DownloadData(url);

网上翻找了一些资料,

说得比较多的是要用HttpWebRequest去获取,但是我尝试了没有成功。

 这种情况明显就是图片远程服务器端做了处理,防止盗用图片,我单独用浏览器访问图片地址时,多次刷新后浏览器也会有相同提示。 

这种一般思路是f12查看network情况,模拟浏览器访问。 研究后大致有如下问题,

 wc的证书凭证设置 

user-agent设置 

referer设置

 host设置 

最后的代码如下

WebClient client = new WebClient();
client.Credentials = CredentialCache.DefaultCredentials;
client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36");
client.Headers.Add("Host", new Uri(url).Host);
client.Headers.Add("Referer", refurl);

var result = client.DownloadData(url);

到此问题解决。