Java 从URL获取html
我试图通过访问以下URL从数字图书馆获取搜索结果: 此url在任何web浏览器中都可以正常工作,但是,当我尝试从java应用程序读取此url时,它会返回此html文件,这似乎会将应用程序重定向到另一个页面:Java 从URL获取html,java,url,jsoup,Java,Url,Jsoup,我试图通过访问以下URL从数字图书馆获取搜索结果: 此url在任何web浏览器中都可以正常工作,但是,当我尝试从java应用程序读取此url时,它会返回此html文件,这似乎会将应用程序重定向到另一个页面: <!-- filename: sso --> <html> <head> <title>Login </title> <!-- START filename: meta-tags.pds --> <meta
<!-- filename: sso -->
<html>
<head>
<title>Login </title>
<!-- START filename: meta-tags.pds -->
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="Sun, 06 Nov 1994 08:49:37 GMT" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- END filename: meta-tags.pds -->
<link rel="stylesheet" href="http://monash-dc05.hosted.exlibrisgroup.com:8991/PDSMExlibris.css" type="text/css" />
</head>
<body onload="location = '/goto/http://search.lib.monash.edu:80/primo_library/libweb/action/login.do?afterPDS=true&vid=MON&vid=MON&dscnt=0&targetURL=http%3A%2F%2Fsearch.lib.monash.edu%2Fprimo_library%2Flibweb%2Faction%2Fsearch.do%3Fdscnt%3D0&frbg=&tab=default%5Ftab&dstmp=1397132076758&srt=rank&ct=search&mode=Basic&dum=true&indx=1&tb=&vl%28freeText0%29=java&fn=search&pds_handle=GUEST';">
<noscript>
<div id="header">
<div>
<img src="http://monash-dc05.hosted.exlibrisgroup.com:8991//exlibris/primo/p4_1/pds/html_form/icon/exlibrislogo.jpg" alt="Exlibris Logo" />
<p> </p>
</div>
</div>
<div id="connect">
<a href="/goto/http://search.lib.monash.edu:80/primo_library/libweb/action/login.do?afterPDS=true&vid=MON&vid=MON&dscnt=0&targetURL=http%3A%2F%2Fsearch.lib.monash.edu%2Fprimo_library%2Flibweb%2Faction%2Fsearch.do%3Fdscnt%3D0&frbg=&tab=default%5Ftab&dstmp=1397132076758&srt=rank&ct=search&mode=Basic&dum=true&indx=1&tb=&vl%28freeText0%29=java&fn=search&pds_handle=GUEST">Return from Check SSO </a>
</div>
</noscript>
</body>
</html>
应用程序重定向到的页面(如body onload中所定义)不可用
我的问题是如何使用java应用程序从上面的URL获取html文件,就像从浏览器获取html文件一样
这个数字图书馆没有API或任何公开的服务,否则我会使用它们 更换
&代码>与最后一个代码中的&
(字符串url=“…)阅读返回页面的标题:这是库的登录页面。调用http地址的java对象需要至少提供一次凭据。@collapsar,是的,这是登录页面,但为什么该页面没有来自浏览器的凭据?Reimeus,我刚刚添加了代码。它很简单,只连接到重定向页面。当然不是。您必须至少向库页面提交一次登录数据。成功后,浏览器将存储这些凭据并自动重新提交。事实上,还有其他几种方法可以完成此操作,例如Cookie(由web应用程序服务器提供并存储在浏览器中的少量数据)或精心制作的链接。一些(设计糟糕的)页面分析(有效假设)您的浏览器类型。任何此类场景都需要由您或您使用的java类处理。登录时您会收到多个cookie。除此之外,还会为您分配一个会话id。您可以通过在chrome(ctrl+shift+j)中打开开发者工具来查看cookie,进入控制台,重新加载/加载libraray页面,并在控制台中输入“document.cookie”。在我的系统上,我有JSESSIONID=b644635a774134f64c3387644c215b4;stoid-?PD_PROD?61MONASH.PROD.primo.1701 sg=BLFICAAK;primo_RT=
(已消毒)。您必须至少提供一个valideJESSIONID
。阅读java类的文档,了解它们支持Cookie的机制。
String url="http://search.lib.monash.edu:80/primo_library/libweb/action/login.do?afterPDS=true&vid=MON&vid=MON&dscnt=0&targetURL=http%3A%2F%2Fsearch.lib.monash.edu%2Fprimo_library%2Flibweb%2Faction%2Fsearch.do%3Fdscnt%3D0&frbg=&tab=default%5Ftab&dstmp=1397132076758&srt=rank&ct=search&mode=Basic&dum=true&indx=1&tb=&vl%28freeText0%29=java&fn=search&pds_handle=GUEST";
Document d=Jsoup.connect(url).timeout(60000).get();