2016-12-16 5 views
0

Я пытаюсь загрузить PDF-файл из URL-адреса с помощью консольного приложения Windows. Я использую следующий код:C# console 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); 
} 

Если скопировать и вставить тот же адрес в приведенном выше коде в браузере/почтальона, я получаю файл, однако, когда я пытаюсь то же самое в C# консольное приложение, я получить другой ответ HTML. Я перехватил запрос/ответ с помощью Fiddler, и единственное различие, которое я мог видеть, это то, что когда запрос запускается через браузер/почтальон, я вижу, что к запросу, которые относятся к приложению, над которым мы работаем, добавляются некоторые дополнительные файлы cookie. Я смущен, почему браузер/почтальон может добавлять файлы cookie, специфичные для приложения.

Я попытался очистить все файлы cookie и попробовал его снова в браузере, но Fiddler показывает файлы cookie в запросе. Какие-нибудь подсказки относительно того, что происходит?

+0

Каков адрес? –

+0

Часто куки-файлы, используемые для аутентификации в некотором роде ... Вам решать создать хаки для их получения (т. Е. Путем запроса первой страницы/поддельного входа) или украсть из браузера ... Обычно сайты не тестируются чтобы правильно работать, когда кто-то пытается их очистить, и часто явно настраивает, чтобы сдерживать такое поведение, проверяя файлы cookie/referrer/hidden автоматически сгенерированные поля и тому подобное. –

ответ

-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

что такое URL? проверьте обновленный ответ –

+0

, как вы можете видеть, предоставленный samle загружает файл. если это не так, укажите дополнительные данные, например URL. http://stackoverflow.com/help/mcve –