如果我有这样的一般网址(不限于推特或谷歌):
http://t.co/y4o14bI
有没有简单的方法来检查这个网址是否缩短了?
在上面的例子中,我作为一个人当然可以看到它是短的,但是有一种自动的优雅的方式吗?
答案 0 :(得分:10)
您可以对URL进行请求,看看是否重定向,如果是,则假设它是缩短服务。为此,您必须阅读HTTP状态代码。
另一方面,您可以将一些URL缩短服务(t.co,bit.ly等)列入白名单,并假设缩短了到这些域的所有链接。
第一种方法的缺点是不确定,有些网站在内部使用重定向。第二种方法的缺点是你必须不断添加缩短服务,尽管只有少数被广泛使用。
答案 1 :(得分:2)
一个信号可能是请求URL并查看它是否导致重定向到另一个域。但是,如果没有对“缩短”意味着什么的明确定义,就没有通用的方法。
答案 2 :(得分:1)
如果您知道可用于缩短网址的所有域名,请检查其是否包含:
String[] domains = {"bit.ly", "t.co"...};
for(String domain : domains){
if(url.startsWith("http://" + domain)){
return true;
}
}
return false;
答案 3 :(得分:1)
你做不到。
您只能检查是否列出了几个短片,并检查网址是否以开头。
您还可以尝试检查网址是否短于给定长度(并包含路径/查询字符串),但是某些缩短程序(例如tinyurl)可能比正常网站(aol.com)具有更长的网址
我更喜欢已知缩短剂的清单。
答案 4 :(得分:1)
你不能:你必须按照假设工作。
假设:
www
。com
,edu
等),或者是否co.xx
xx
是有效的国家/地区或组织代码。您可以根据其他网址缩短链接添加更多假设。
答案 5 :(得分:1)
这是你可以用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!
}
答案 6 :(得分:0)
y4o14bI
可以是CMS标识符。
最好的方法是使用已知的缩短网址列表,然后查找。
即便如此,你也会有问题。我将bit.ly用于个人域名,wtn.gd
所以http://wtn.gd/random也是一个缩短的网址。
您可以执行HTTP HEAD请求,并检查301/302?
答案 7 :(得分:0)
如果您请求这样的网址,您的HttpCLient应该会收到HTTP重定向而不是HTML网页。这不是证据,但至少是一个暗示。
答案 8 :(得分:0)
评估网址并寻找一些线索:
路径符合某些标准
HttpUrlConnection返回重定向responseCode(即301,302)
答案 9 :(得分:0)
我建议使用android.util.Patterns.WEB_URL
public static List<String> findUrls(String input) {
List<String> links = new ArrayList<>();
Matcher m = android.util.Patterns.WEB_URL.matcher(input);
while (m.find()) {
String url = m.group();
links.add(url);
}
return links;
}