我一直在修改一个程序,让我可以在网上批量下载图片库,因为我喜欢从视频游戏中收集艺术品等等。我一直在尝试调整它以便能够从DeviantArt下载,我让它适用于所有事情,除非我试图让它按照那里附带许多图像的下载按钮。我已经做了我能想到的所有尝试重新创建一个真实的Web请求,但到目前为止,我在响应中得到的是一个重定向回主图像页面的HTML页面。以下是我目前正在尝试的方法:
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(im.Groups[1].Value);
req.MaximumAutomaticRedirections = 5;
req.Method = "HEAD";
req.Accept = "*/*";
req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36";
req.Headers.Add("Accept-Encoding", "gzip, deflate, sdch");
req.Headers.Add("Accept-Language", "en-US,en;q=0.8");
req.Headers.Add("Upgrade-Insecure-Requests", "1");
req.Referer = m.Value;
if (!String.IsNullOrWhiteSpace(this.lastSetCookie))
{
CookieContainer cc = new CookieContainer();
string[] cookie_sections = this.lastSetCookie.Split(';');
Dictionary<String, String> cookie_arge = new Dictionary<string, string>();
foreach(String cookie_section in cookie_sections)
{
cookie_arge.Add(cookie_section.Split('=')[0].Trim(), cookie_section.Split('=')[1].Trim());
}
cc.Add(new Uri("http://deviantart.com"), new Cookie("userinfo",cookie_arge["userinfo"]));
}
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
image_url = res.ResponseUri.AbsoluteUri;
res.Close();
正如您所看到的,我创建了一个请求,确保它允许一些重定向,然后手动设置我验证的一些标题字段由常规Chrome浏览器发送。正在发送的引用是图像的主页面。下一位检查存储在请求图像页面时从服务器接收的cookie的变量,然后在新请求上设置这些cookie。 Deviantart会做一些会话魔法,因此保留cookie非常重要。然后发送请求,并返回带有javascript和元标记的HTML页面重定向回图像页面。有什么想法可以尝试吗?