如何在没有pdf文件名的情况下保存/下载嵌入网页的pdf文件

本文关键字:pdf 下载 文件 网页 保存 情况下 文件名 | 更新日期: 2023-09-27 18:29:32

我正在用C#编写一个web抓取程序。到目前为止,我已经能够登录网站,保存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,还是我在那里做错了什么?

如何在没有pdf文件名的情况下保存/下载嵌入网页的pdf文件

CF中将PDF流式传输到浏览器的常用方法是使用以下方法:

<cfheader name="Content-Disposition" value="attachment;filename=#PDFFileName#">
<cfcontent type="application/pdf" reset="true" variable="#toBinary(PDFinMemory)#">

使用C#WebRequest获取PDf的URL。然后检查响应标头中的"内容类型"application/pdf'。如果是,请将二进制流保存到磁盘上的PDF文件中。

假设CFID和CFTOKEN不是真正需要的,(你可以在没有CFID和CF TOKEN的情况下测试URL,看看你是否仍然可以成功获取PDF)

  1. 使用WebRequest向该URL发出GET请求(请参阅:http://support.microsoft.com/kb/307023)

  2. 将二进制流保存为PDF文件。

我得到了一个链接,可以链接到pdf,但页面没有以.pdf扩展名。。首先我如何获得二进制数据?

除了其他建议之外,还有一个小的澄清。文件扩展名其实并不重要。重要的是内容。.cfm脚本可以返回任何内容类型,而不仅仅是text/html。所以它可以模仿pdf、图像等。只要你的链接返回类型application/pdf,你就应该返回一个可以保存到文件中的二进制流(即pdf)。原始文件名可以从WebResponse标头中获取。