1

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

http://isap.sejm.gov.pl/Det​​ailsS​​ervlet?id=WDU20061831353

这与 FileUtils.copyURLtoFile 方法完美配合。

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

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

如果使用常规浏览器打开此链接,则效果很好,但是当我尝试通过 FileUtils 以 Java 下载它时——我只得到一个没有内容的页面,其中包含一条消息“trwa ladowanie danych”(意思是:“正在加载data...") 但没有任何反应,目标页面未加载。

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

问候 -

4

3 回答 3

0

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

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

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

于 2015-03-11T07:23:37.713 回答
0

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

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

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

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

于 2015-03-11T10:04:00.307 回答
0

尝试使用 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();
于 2015-03-11T07:29:19.433 回答