【问题标题】:Downloading a PDF file from a url location results in a HTML file从 url 位置下载 PDF 文件会生成 HTML 文件
【发布时间】:2020-11-14 09:36:57
【问题描述】:

我正在尝试从网上下载 PDF 文件。下载的文件是 HTML 文件(无法用 Adob​​e Reader 打开)。下载完成,结果为 200。

 string tempFile = System.IO.Path.GetTempFileName();
 tempFile = System.IO.Path.ChangeExtension(tempFile, "pdf");
   
 HttpResponseMessage msg;
 using (HttpClient client = new HttpClient())
 {
 msg = await client.GetAsync($"https://www.anaf.ro/StareD112/ObtineRecipisa?numefisier=217776607.pdf");

            if (msg.IsSuccessStatusCode)
            {
                using (var file = File.Create(tempFile))
                {
                    var contentStream = await msg.Content.ReadAsStreamAsync(); 
                    await contentStream.CopyToAsync(file);
                    await file.FlushAsync();
                }
            }
        }

下载的文件有以下内容:

<!DOCTYPE html><html><head><meta http-equiv="Pragma" content="no-cache"/><meta http-equiv="Expires" content="-1"/><meta http-equiv="CacheControl" content="no-cache"/><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><link rel="shortcut icon" href="data:;base64,iVBORw0KGgo="/><script>(function(){window["bobcmn"] = "111111101...})();</script><script type="text/javascript" src="/TSPD/08b919fd7aab2000e3f4522c0108677748c289d7a5e2904fcfef59fb022a19a5fd44f0a0664ad54a?type=10"></script><noscript>Please enable JavaScript to view the page content.<br/>Your support ID is: 10865965003120525066.</noscript>

你能告诉我我做错了什么吗?

【问题讨论】:

  • 你能告诉我我做错了什么吗?没什么...文件是 HTML 文件而不是 pdf - 它可能是某种防止数据抓取的保护跨度>
  • 我的猜测是您没有点击正确的 URL,但可能没有可用的 URL 可以简单地将文件流式传输给您。您使用的 URL 看起来好像指向一个 HTML 文件。如果当您在浏览器中访问它时,它会将 PDF 流式传输给您,那么就是页面本身连接到文件服务器(或启动 PDF 生成过程)。
  • 如果您在浏览器中尝试示例中的链接,您将能够下载可以使用 Adob​​e Acrobat Reader DC 阅读的 PDF 文件。我从该链接通过代码下载的文件是最初问题陈述中所附的文件。直到 1 天前,代码才能正确下载 PDF 文件。我假设服务器发生了一些变化,但我不知道。

标签: c# pdf download


【解决方案1】:

网址https://www.anaf.ro/StareD112/ObtineRecipisa?numefisier=217776607.pdf 根据请求显示验证码:

您的代码会下载验证码的 HTML。

您需要使用一些技术来防止检测到刮擦。尝试使用 Selenium + 无头浏览器。欲了解更多信息:

  1. 硒+铬
    Running Selenium with Headless Chrome Webdriver
    Downloading with chrome headless and selenium

  2. Selenium + Phantom JS
    C# example of using PhantomJS webdriver ExecutePhantomJS to filter out images
    How to capture a file download using phantomJS

【讨论】:

  • 奇怪的东西!对我来说,无论我使用哪个浏览器打开该链接,PDF 文档都会直接打开。我尝试清空浏览器缓存并使用新安装的 Windows,但该验证码从未出现...也许它出现在您面前是因为您在另一个国家/地区?我尝试了另一个实验:在一个简单的 WinForms 应用程序中,我放置了一个 WebBrowser,我使用上面的链接设置了 Navigate 属性。 PDF 文件显示正确!现在我正在寻找一种将浏览器内容保存到 PDF 文件的方法。
  • 顺便说一句,我今天无法重现此验证码。我试图从 Tor 浏览器加载你的 url 并重现了第三种行为 - 它将我重定向到 mentenanta.anaf.ro
  • 网站有时会进行维护。这是我们财政部的网站!我认为最简单的方法是想办法将c#应用程序中WebBrowser控件的内容保存为PDF文件。我还没找到呢!
猜你喜欢
  • 2014-09-08
  • 1970-01-01
  • 2016-11-24
  • 2023-03-28
  • 2019-07-14
  • 2014-09-29
  • 2020-11-04
  • 2021-07-13
  • 1970-01-01
相关资源
最近更新 更多