【问题标题】:Cannot Read a URL from java code无法从 java 代码中读取 URL
【发布时间】:2014-03-16 03:39:32
【问题描述】:

我已经迫不及待想要得到这个URL 的内容了。

尝试从 Web 浏览器访问此页面时不需要身份验证,但是当我尝试从 Web 应用程序获取内容时,我会得到 sso 文件作为响应。我使用的代码如下:

HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://search.lib.monash.edu/primo_library/libweb/action/search.do?dscnt=1&frbg=&tab=default_tab&srt=rank&ct=search&mode=Basic&dum=true&tb=&indx=1&vl%28freeText0%29=java&fn=search&vid=MON");
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity responseEntity = httpResponse.getEntity();


BufferedReader in = new BufferedReader(
            new InputStreamReader(responseEntity.getContent()));
    String inputLine;
    StringBuffer response = new StringBuffer();


    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();

    System.out.println(response.toString());    

我得到的 sso 文件如下:

<!-- 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=2&targetURL=http%3A%2F%2Fsearch.lib.monash.edu%2Fprimo_library%2Flibweb%2Faction%2Fsearch.do%3Fdscnt%3D0&frbg=&tab=default%5Ftab&dstmp=1394940513823&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>&nbsp;</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=2&targetURL=http%3A%2F%2Fsearch.lib.monash.edu%2Fprimo_library%2Flibweb%2Faction%2Fsearch.do%3Fdscnt%3D0&frbg=&tab=default%5Ftab&dstmp=1394940513823&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></noscript> </div> </body> </html></body></html>

请帮忙。

【问题讨论】:

    标签: java http url single-sign-on


    【解决方案1】:

    不是因为任何身份验证问题。

    返回的页面有一个与body 关联的onload 事件。由于这个原因,当您在浏览器客户端中打开引用的 URL 时,

    1. 它首先接收到你在response 中的响应html 字符串。
    2. 然后它会尝试渲染和显示它。
    3. 但是,与此同时,onload 事件触发并将 URL 加载为 由location='/goto/.....定义。
    4. 并且,在显示当前页面之前,接收到新页面 并显示在浏览器上。

    根据您收到的回复,请注意:

    在 JAVA 代码中,您只是从指定的 URL 读取内容。
    而且您没有将它传递给任何内容解析器来呈现和显示。除非它将被视为静态文本。

    因此,您在 JAVA 代码中看不到响应,与在 Web 浏览器中看到的相比。

    其他建议
    当您读取一行并将其附加到缓冲区时,最好还附加一个 CRLF。

    变化:

        response.append(inputLine);
    

    收件人:

        response.append( inputLine ).append( "\r\n" );
    

    它使响应文本多行且更具可读性。

    【讨论】:

    • 感谢您的解释,不太明白发生了什么!在我的应用程序中,我只想将搜索结果作为静态文本进行某种处理。如果我转到“转到”URL,那么我会转到正确的页面,但它只涉及 java 代码,而不涉及呈现的结果。我现在想知道如何获得搜索结果。非常感谢您的帮助!
    • 对于搜索结果,您最好依赖网站上的任何 RSS 提要服务(如果可用)。否则你需要任何第三方工具。
    • 系统没有任何类型的 API。您是否推荐任何工具来做到这一点?谢谢!
    • 我目前没有关于此类工具的任何此类信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2016-05-31
    相关资源
    最近更新 更多