2016-12-16 50 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 –

相關問題