我正在尝试使用Windows控制台应用程序从URL下载PDF。我使用以下代码:
using (var webClient = new System.Net.WebClient())
{
webClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36");
byte[] data = webClient.DownloadData(url);
System.IO.File.WriteAllBytes(@"D:\Files\hello.pdf", data);
}
如果我在浏览器/邮递员的上述代码中复制并粘贴相同的URL,我会得到该文件,但是当我在C#控制台应用程序中尝试相同时,我会得到一些其他的HTML响应。我使用Fiddler拦截了请求/响应,唯一的区别是,当通过浏览器/邮递员发出请求时,我看到一些额外的cookie被添加到请求中,这些cookie特定于我们正在处理的应用程序。我很困惑浏览器/邮递员如何添加特定于应用程序的cookie。
我尝试清除所有Cookie并从浏览器再次尝试,但Fiddler会在请求中显示Cookie。关于发生了什么的任何线索?
答案 0 :(得分:-1)
检查此代码
var request = WebRequest.Create(url);
request.Headers[HttpRequestHeader.UserAgent] = @"Mozilla / 5.0(Windows NT 6.3; WOW64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 54.0.2840.99 Safari / 537.36";
var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
// write
}
答案 1 :(得分:-1)
为什么需要这些字节?下载并保存一行:
using (var client = new WebClient())
{
client.DownloadFile("http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf", "C:\\book.pdf");
}