Загрузка файла PDF с помощью веб-запросов

Я пытаюсь автоматически загрузить несколько PDF-файлов с указанием списка URL-адресов.

Вот код, который у меня есть:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.Method = "GET";

var encoding = new UTF8Encoding();

request.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-gb,en;q=0.5");
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");

request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0";

HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

BinaryReader reader = new BinaryReader(resp.GetResponseStream());

FileStream stream = new FileStream("output/" + date.ToString("yyyy-MM-dd") + ".pdf",FileMode.Create);

BinaryWriter writer = new BinaryWriter(stream);

while (reader.PeekChar() != -1)
      {
       writer.Write(reader.Read());
      }
       writer.Flush();
       writer.Close();

Итак, я знаю, что первая часть работает. Первоначально я получал и читал его с помощью TextReader - но это дало мне поврежденные PDF-файлы (поскольку PDF-файлы являются двоичными файлами).

Прямо сейчас, если я запускаю его, reader.PeekChar () всегда равен -1 и ничего не происходит - я получаю пустой файл.

Во время отладки я заметил, что reader.Read () на самом деле давал разные числа, когда вызывал его - так что, возможно, Peek сломан.

Поэтому я попробовал что-то очень грязное

try
{
 while (true)
   {
    writer.Write(reader.Read());
    }
 }
   catch
      {
      }
 writer.Flush();
 writer.Close();

Теперь я получаю очень маленький файл с каким-то мусором, но он все еще не тот, который я ищу.

Итак, кто-нибудь может указать мне правильное направление?

Дополнительная информация:

Заголовок не предлагает его сжатый или что-либо еще.

HTTP/1.1 200 OK
Content-Type: application/pdf
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Fri, 10 Aug 2012 11:15:48 GMT
Content-Length: 109809

Ответы на вопрос(4)

Ваш ответ на вопрос