【问题标题】:JAVA: how to download webpage dynamically created by servletJAVA:如何下载由servlet动态创建的网页
【发布时间】:2015-03-11 07:13:00
【问题描述】:

我想从该 URL 将网页源下载到文件 (*.htm)(即带有所有 html 标记的整个内容):

http://isap.sejm.gov.pl/DetailsServlet?id=WDU20061831353

与 FileUtils.copyURLtoFile 方法完美配合。

但是,上述网址也有一些链接,例如我非常感兴趣的一个:

http://isap.sejm.gov.pl/RelatedServlet?id=WDU20061831353&type=9&isNew=true

如果使用常规浏览器打开此链接,则可以正常工作,但是当我尝试通过 FileUtils 在 Java 中下载它时——我只得到一个没有内容的页面,其中包含一条消息“trwa ladowanie danych”(这意味着: "loading data...") 但是什么也没发生,目标页面没有加载。

谁能帮我解决这个问题?从 URL 中我可以看到该页面使用 Servlet——有没有一种特殊的方法可以下载使用 servlet 创建的页面?

问候 --

【问题讨论】:

    标签: java servlets download fileutils


    【解决方案1】:

    这不是 servlet 问题 - 只是 碰巧 是用于实现服务器的技术,但通常客户端不需要关心这一点。我强烈怀疑这只是服务器根据请求标头(例如用户代理)响应不同的数据。例如,当我使用 curl 获取它时,与我在 Chrome 中加载它时相比,我看到了非常不同的响应。

    我建议您尝试使用curl,发出一个看起来尽可能接近来自浏览器的请求的请求,然后反复调整直到您能准确找出涉及哪些标头。您可能希望使用WiresharkFiddler 来轻松查看所涉及的确切请求/响应。

    当然,即使您可以正确获取原始 HTML,仍然存在所有 Javascript - HTML 不包含任何数据是完全可行的,但它包含执行实际数据获取的 Javascript。我不相信这个特定页面是这种情况,但你很可能会发现它发生在

    【讨论】:

    • 感谢 Jon 的快速答复。将深入研究 curl :)
    【解决方案2】:

    尝试使用 selenium webdriver 到主页

    HtmlUnitDriver driver = new HtmlUnitDriver(true); 
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    driver.get(baseUrl);
    

    然后导航到链接

    driver.findElement(By.name("name of link")).click();
    

    【讨论】:

    • 不,这似乎不起作用...奇怪的是,有时使用 FileUtils 的原始解决方案可以正常工作...但是当我重新运行应用程序时再次得到不正确的结果......奇怪。
    【解决方案3】:

    更新:我检查了以下内容:如果我在 Firefox 中关闭 cookie,然后尝试加载我的页面:

    http://isap.sejm.gov.pl/RelatedServlet?id=WDU20061831353&type=9&isNew=true

    然后我产生不正确的结果,就像在我的 java 应用程序中一样(即带有“正在加载数据”消息而不是正确内容的页面)。

    现在,我怎样才能在java中管理cookies才能正确下载这个页面呢?

    【讨论】:

      猜你喜欢
      • 2013-05-13
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多