2016-12-16 33 views
0

我试图使用Windows控制台应用程序从URL下载PDF。我使用下面的代码:C#控制台Webclient不返回数据,但浏览器确实

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。

我试着清除所有的cookies,并从浏览器中再次尝试,但是Fiddler在请求中显示了cookies。关于发生了什么的任何线索?

+0

什么是网址? –

+0

经常使用cookies来进行某种类型的身份验证...取决于您是否需要获取它们(例如,通过请求页面优先/伪造登录)或从浏览器中窃取...一般来说站点未经过测试在有人试图抓取它们时正常工作,并且经常通过检查cookie/referrer /隐藏的自动生成的字段等来明确地设置以阻止这种行为。 –

回答

-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

你为什么需要这些字节?下载并保存一行:

using (var client = new WebClient()) 
{ 
    client.DownloadFile("http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf", "C:\\book.pdf"); 
} 
+0

试过,但它给出了那些字节相同的结果 – Thomas

+0

什么是网址?请检查更新后的答案 –

+0

,因为您可以看到提供了samle下载文件。如果情况并非如此,请提供其他详细信息,例如URL。 http://stackoverflow.com/help/mcve –

相关问题