Java:如何轻松检查URL是否已经缩短?

问题描述 投票:6回答:10

如果我有这样的通用网址(不限于Twitter或Google):

http://t.co/y4o14bI

是否有一种简单的方法来检查此URL是否缩短?

在上述情况下,我作为人类当然可以看到它已经缩短了,但是有没有一种自动且优雅的方式?

java url-shortener
10个回答
10
投票

您可以向URL发出请求,查看是否被重定向,如果是,则假定它是一种缩短服务。为此,您必须阅读HTTP状态代码。

另一方面,您可以将某些URL缩短服务(t.co,bit.ly等)列入白名单,并假定到这些域的所有链接都被缩短了。

第一种方法的缺点是不确定,某些站点在内部使用重定向。第二种方法的缺点是,尽管只有少数几种被广泛使用,但您仍必须继续添加起酥油服务。


0
投票

我建议使用android.util.Patterns.WEB_URL


2
投票

一个信号可能是请求URL,然后查看是否导致重定向到另一个域。但是,如果对“缩短”的含义没有一个好的定义,就没有通用的方法。


1
投票

如果您知道可用于缩短URL的所有域,请检查它是否包含:

String[] domains = {"bit.ly", "t.co"...};
for(String domain : domains){
  if(url.startsWith("http://" + domain)){
    return true;
  }
}
return false;

1
投票

您不能:您将不得不假设工作。

假设:

  • URL中是否存在www
  • 服务器名称以有效域结尾(例如comedu等)还是具有co.xx,其中xx是有效的国家或组织代码。

并且您可以基于其他url缩短链接添加更多假设。


1
投票

你不能。

您只能检查是否列出了几个起酥油,并检查网址以它开头

您也可以尝试检查网址是否短于给定的长度(并包含路径/查询字符串),但是某些缩写(例如,tinyurl)的网址可能比普通网站(aol.com)长]

我希望使用已知的起酥油的清单。


1
投票

这是您可以使用Java,groovy等进行的操作。

  • 获取要测试的网址;
  • 使用HttpURLConnection打开URL
  • 检查响应码
  • [如果是有效的代码,例如200,则可以从连接对象中检索长字符串形式的url字符串(如果已将其缩短,否则将其恢复为原始形式。)>
  • 我们都希望看到一些代码不是我们。它很粗糙,但是嘿!

String addr = "http://t.co/y4o14bI";
URL url = new URL(addr);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

if (connection.getResponseCode() == 200) {
    String longUrl = connection.url;
    System.out.println(longUrl);
} else {
    // You decide what you want to do here!
}

0
投票

实际上,您作为人类,不能。您知道


0
投票

如果您请求这样的URL,您的HttpCLient应该收到HTTP重定向而不是HTML页面。这不是证据,至少是提示。


0
投票

评估URL并寻找一些线索:

© www.soinside.com 2019 - 2024. All rights reserved.