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
评论 (0)