c# - 使用 WebRequests 下载 pdf 文件

标签 c# pdf webrequest binaryreader

我正在尝试根据 url 列表自动下载许多 pdf 文件。

这是我的代码:

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();

现在我得到一个非常小的文件,里面有一些垃圾,但它仍然不是我要找的。

那么,任何人都可以指出正确的方向吗?

附加信息:

header 不建议其压缩或其他任何内容。

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

最佳答案

跳过 BinaryReaderBinaryWriter,只需将输入流复制到输出 FileStream。简单地说

var fileName = "output/" + date.ToString("yyyy-MM-dd") + ".pdf";
using (var stream = File.Create(fileName))
  resp.GetResponseStream().CopyTo(stream);

关于c# - 使用 WebRequests 下载 pdf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11901381/

相关文章:

c# - 如何使用 WebRequest 访问使用 HTTPS 的 SSL 加密站点?

c# - 如何制作文章微调器正则表达式?

c# - 我可以通过编程方式向 XAML 添加元素吗? WPF C#

c# - 获取当前用户 SID 的最佳方法是什么?

c# - 在 asp.net 中从 DB- 检索 pdf 文件的链接

jquery - Chrome扩展程序webrequest网络xhr异常

c# - html5和C#之间的web socket通信

c# - 为什么 foreach 在与 itextsharp 一起使用时会导致错误

java - 在启用语法高亮的情况下将 Java 源代码输出为 pdf

c# - 是什么导致这个 HTTPS WebRequest 即使在浏览器中工作也会超时?