生成新浪短网址、百度短网址,t.cn / dwz.cn 的生成方式,短链还原
应本站用户要求开发了短链生成服务,市面上的短链鱼龙混杂,这里也说明一下这个背后的产业,我们在使用过程中请擦亮眼睛去使用。
短链工具地址:https://www.sojson.com/dwz.html
一、短链使用的风险
1、稳定性
我们使用短链肯定希望短链服务稳定,现在开发成本低,导致随便几个小时就可以搞一套短链服务,买一个短一点的域名,开始开放出来给用户使用,用一段时间后,随着运营成本增加,说停用就停用了。
2、收费风险
短链开始火的时候好多这样的产业滋生出来,一般手段是开发一个短链服务,好多都直接上百度推广,让你免费用,等你用一段时间后,开始拦截你的链接跳转,然后开始收费(一般理由为“由于大量用户举报,所以停封,需要付费解封”),而这个时候你的系统一般都上线了,或者都推广出去了,好多人短链服务生成都是为了降低二维码的复杂性,二维码都印好了推广出去了,不好修改,所以你没办法,必须付费。
二、短链的使用场景
1、短信带链接
手机发短信的时候,由于字数限制,另外我们一般的链接过长,主要是因为域名过长,再加上乱七八糟的参数,发出去短信难看的很,用了短链后就很优雅了。
2、短链接生成二维码
二维码的火爆和便捷,也带来了一个难题,我们都知道二维码表达的内容有限,内容越多,二维码看上去越复杂,而且识别率越低,尤其配置较低的手机比较难识别内容很多的二维码,我们用短链可以解决这个问题。先把长链转成短链,然后再去生成二维码。
三、短链的生成
1、百度短链(dwz.cn)生成
dwz.cn就是短网址的首拼音缩写,由百度提供服务。
优点:稳定,毕竟是大公司开发。有数据报表:https://dwz.cn/console/report
缺点:网址必须百度收录了才可以生成。
>>正规生成:
①.申请apikey
申请网址:https://dwz.cn/console/userinfo需要开通开发者,跟着提示走就可以了。
②.接口代码
常用的语言都有:https://dwz.cn/console/apidoc
然后HTTP调用即可生成。
抓包生成:
百度短网址的官方生成地址:https://dwz.cn/
生成的时候直接可以抓包:https://dwz.cn/admin/v2/create
参数就一个:{"url":"你要生成的URL"}
这里就不过多讲解。
2、新浪短链(t.cn)生成
主要讲解新浪短链,直接上代码。
//链接要做urlencode编码
const u = encodeURIComponent("你要转码的长连接");
$.ajax({
url:"https://api.weibo.com/2/short_url/shorten.json?source=2849184197&url_long={%u}".fmt({u}),
dataType:'jsonp',
success:function (data) {
if(data && data.code ===1 ){
var url = data.data.urls[0].url_short;
outShortInfo(url);//输出短链方法
}else{
layer.msg('生成失败',so.defn);
}
}
});
直接 jsonp 调用,source
直接使用2849184197
即可,是官方的key
,放心使用。
就一个参数url_long=你生成的URL
,注意这里要做urlcode
编码。
urlcode编码在线工具:https://www.sojson.com/encodeurl.html
四、短链的解码
每一个短链服务一般自己会对应一个解码服务,我懒得对接,而且现在的短链鱼龙混杂,所以我就直接写了一个通用的。直接上代码。
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.HeadMethod;
import org.apache.commons.httpclient.params.HttpParams;
/**
* 短链 解析成长链
* @param url
* @return
*/
public static SOMap parse(String url){
HttpClient client = new HttpClient();
HttpMethod method = new HeadMethod(url);
try {
HttpParams params = client.getParams();
params.setParameter(AllClientPNames.HANDLE_REDIRECTS, false);
client.executeMethod(method);
String aurl = method.getURI().getURI();
if(StringUtils.equals(url,aurl)){
method.releaseConnection();
method = new GetMethod(url);
params = client.getParams();
params.setParameter(AllClientPNames.HANDLE_REDIRECTS, false);
client.executeMethod(method);
aurl = method.getURI().getURI();
return SOMap.success().push("url",aurl);
}
method.releaseConnection();
return SOMap.success().push("url",aurl);
} catch (IOException e) {
Header headers = method.getResponseHeader("Location");
if(null == headers || null == ( url = headers.getValue())){
return SOMap.error("解析失败,确认链接是否存在");
}
}
return SOMap.success().push("url",url);
}
其实就是通过 http 请求,获取301
、302
后的url
,有利有弊,使用了2种方式获取,其他的语言模仿写就可以了。里面的SOMap
为我的封装,其实就是一个map
,我为了方便链式变成继承了LinkedHashMap
。另外AllClientPNames.HANDLE_REDIRECTS = "http.protocol.handle-redirects"。
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/330.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。