我正在用C#编写一个网络抓取程序。到目前为止,我已经能够登录网站,保存cookie,并返回另一页的源代码。从这个源代码中,我得到一个链接,将我带到pdf,但该页面不以.pdf扩展名结尾。在浏览器中,此页面显示pdf图像,浏览器中有控件,包括保存按钮。
我相信pdf页面是使用ColdFusion创建的,因为它在URL中有.cfm,CFID和CFTOKEN。
如何以编程方式保存此pdf文件?
有两个答案建议我将二进制流保存为pdf。如何获取二进制数据?我尝试过以下方法:
byte[] result;
byte[] buffer = new byte[4096];
WebRequest wr = WebRequest.Create(billURL);
using (WebResponse response = wr.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (MemoryStream memoryStream = new MemoryStream())
{
int count = 0;
do
{
count = responseStream.Read(buffer, 0, buffer.Length);
memoryStream.Write(buffer, 0, count);
} while (count != 0);
result = memoryStream.ToArray();
}
}
}
我是否想将结果保存为pdf,或者我在那里做错了什么?
答案 0 :(得分:1)
假设确实不需要CFID和CFTOKEN,(您可以测试没有CFID和CFTOKEN的URL,看看您是否仍然可以成功获取PDF)
使用WebRequest
向该网址发出GET请求(请参阅:http://support.microsoft.com/kb/307023)
将二进制流保存为PDF文件。
答案 1 :(得分:1)
CF中用于将PDF流式传输到浏览器的常用方法是使用以下方法:
<cfheader name="Content-Disposition" value="attachment;filename=#PDFFileName#">
<cfcontent type="application/pdf" reset="true" variable="#toBinary(PDFinMemory)#">
使用C#WebRequest获取PDf的URL。然后检查“Content-Type of”application / pdf'的响应头。如果是这样,请将二进制流保存到磁盘上的PDF文件中。
答案 2 :(得分:1)
我收到一个链接,将我带到pdf,但该页面并未结束 .pdf扩展.. 如何获取二进制数据?
除了其他建议外,还有一个小的澄清。文件扩展名并不重要。重要的是内容。 .cfm脚本可以返回任何content-type,而不只是text/html
。所以它可以模仿pdf,图像等。只要您的链接返回类型application/pdf
,您就应该返回一个可以保存到文件的二进制流(即pdf)。原始文件名可以从WebResponse headers获得。