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();
今、私はゴミが入った非常に小さなファイルを取得していますが、それでも私が探しているものではありません。
だから、誰でも私を正しい方向に向けることができますか?
追加情報:
ヘッダーは、圧縮されたものなどを示唆していません。
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