我正在尝试自动下载一些 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