如果我有这样的通用网址(不限于Twitter或Google):
http://t.co/y4o14bI
是否有一种简单的方法来检查此URL是否缩短?
在上述情况下,我作为人类当然可以看到它已经缩短了,但是有没有一种自动且优雅的方式?
您可以向URL发出请求,查看是否被重定向,如果是,则假定它是一种缩短服务。为此,您必须阅读HTTP状态代码。
另一方面,您可以将某些URL缩短服务(t.co,bit.ly等)列入白名单,并假定到这些域的所有链接都被缩短了。
第一种方法的缺点是不确定,某些站点在内部使用重定向。第二种方法的缺点是,尽管只有少数几种被广泛使用,但您仍必须继续添加起酥油服务。
我建议使用android.util.Patterns.WEB_URL
一个信号可能是请求URL,然后查看是否导致重定向到另一个域。但是,如果对“缩短”的含义没有一个好的定义,就没有通用的方法。
如果您知道可用于缩短URL的所有域,请检查它是否包含:
String[] domains = {"bit.ly", "t.co"...};
for(String domain : domains){
if(url.startsWith("http://" + domain)){
return true;
}
}
return false;
您不能:您将不得不假设工作。
假设:
www
。com
,edu
等)还是具有co.xx
,其中xx
是有效的国家或组织代码。并且您可以基于其他url缩短链接添加更多假设。
你不能。
您只能检查是否列出了几个起酥油,并检查网址以它开头。
您也可以尝试检查网址是否短于给定的长度(并包含路径/查询字符串),但是某些缩写(例如,tinyurl)的网址可能比普通网站(aol.com)长]
我希望使用已知的起酥油的清单。
这是您可以使用Java,groovy等进行的操作。
我们都希望看到一些代码不是我们。它很粗糙,但是嘿!
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!
}
实际上,您作为人类,不能。您知道
如果您请求这样的URL,您的HttpCLient应该收到HTTP重定向而不是HTML页面。这不是证据,至少是提示。
评估URL并寻找一些线索: