【问题标题】:how to fetch base url from the given url using java如何使用java从给定的url中获取基本url
【发布时间】:2011-08-26 04:45:11
【问题描述】:

我正在尝试使用 java 获取基本 URL。我在代码中使用了 jtidy 解析器来获取标题。我使用 jtidy 正确获取标题,但没有从给定 URL 获取基本 URL。

我有一些 URL 作为输入:

String s1 = "http://staff.unak.is/andy/GameProgramming0910/new_page_2.htm";
String s2 = "http://www.complex.com/pop-culture/2011/04/10-hottest-women-in-fast-and-furious-movies";

我想从第一个字符串中获取 "http://staff.unak.is/andy/GameProgramming0910/" 作为基本 URL,从第二个字符串中获取 "http://www.complex.com/" 作为基本 URL。

我正在使用代码:

URL url = new URL(s1);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream in = conn.getInputStream();
Document doc = new Tidy().parseDOM(in, null);
String titleText = doc.getElementsByTagName("title").item(0).getFirstChild()
.getNodeValue();

我收到了titletext,但请告诉我如何从上面给定的 URL 获取基本 URL?

【问题讨论】:

  • 哪些规则会告诉您http://www.complex.com/ 是基本网址而不是http://www.complex.com/pop-culture/2011/04/

标签: java jtidy base-url


【解决方案1】:

尝试使用 java.net.URL 类,它会帮助你:

对于第二种情况,更简单,你可以使用 new URL(s2).getHost();

对于第一种情况,您可以获取主机并使用 getFile() 方法,并删除最后一个斜杠(“/”)之后的字符串。类似于:(代码未测试)

URL url = new URL(s1);
String path = url.getFile().substring(0, url.getFile().lastIndexOf('/'));
String base = url.getProtocol() + "://" + url.getHost() + path;

【讨论】:

  • 我投了赞成票,但在我看来第三条语句应该是:String base = url.getProtocol() + "://" + url.getHost() + path;
  • THINK URL getProtocol() 返回“://”,但我没有测试:(
  • @Pih 至少在 Java 6 中,它没有。您必须添加它。认为“://”不是协议名称的一部分。
  • url 字符串需要检查是否有协议,否则会抛出格式错误的 url 异常。
  • 看起来如果端口与默认端口不同,最好使用 url.getAuthority() 而不是 getHost()。信息:docs.oracle.com/javase/tutorial/networking/urls/urlInfo.html
【解决方案2】:

您使用 java.net.URL 类来解析相对 URL。

对于第一种情况:从路径中删除文件名:

new URL(new URL(s1), ".").toString()

对于第二种情况:设置根路径:

new URL(new URL(s2), "/").toString()

【讨论】:

    猜你喜欢
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 2014-02-10
    • 1970-01-01
    相关资源
    最近更新 更多