什么是短链接?

就是把普通网址,转换成比较短的网址。比如:www.cyho.top/SvEZf 这种,很短,但进入链接后会发现跳转到一个链接很长的页面中,在微博这些限制字数的应用里。好处不言而喻。短、字符少、美观、便于发布、传播。

接口免费、短链接永久有效

一、效果

1、一对一;短链接与长链接一对一跳转

复制链接查看效果: www.cyho.top/SvEZf
链接永久有效,若需要https,可自己再套一层域名解析

2、多链接随机跳转;一条短链接对应多条长链接,按照自定义比例随机跳转(同ip 24小时内只能随机到其中一个)

复制链接查看效果: www.cyho.top/SfMnI

3、ip归属地跳转;根据不同的ip归属地,跳转到不同的链接。比如上海的跳到百度,杭州的跳到搜狗

复制链接查看效果: www.cyho.top/S22Yf
浙江省杭州市 用户,跳转到 ip归属地解析文章
江苏省全省 用户,跳转到用户地址识别文章
其他地区 用户,跳转到工具集文章

二、生成代码

1、一对一

public static void main(String[] args) throws IOException {String longUrl = "https://blog.csdn.net/qq_41175917/article/details/125956334";String aesKey = "023382397f9848458967d2b5b9462205";Long userId = 18293l;SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {JSONObject jsonObject = new JSONObject();JSONObject head = new JSONObject();head.put("userId", userId);head.put("time", AesUtils.encrypt(time.format(new Date()), aesKey));jsonObject.put("head", head);jsonObject.put("longUrl", AesUtils.encrypt(longUrl,aesKey));Connection.Response execute = Jsoup.connect("http://www.cyho.top/shortUrl/set").requestBody(jsonObject.toJSONString()).ignoreContentType(true).method(Connection.Method.POST).header("content-type", "application/json;charset=UTF-8").execute();System.out.println(execute.body());// 响应:{"msg":"success","code":0,"shortUrl":"www.cyho.top/SRNj6"}} catch (Exception e) {e.printStackTrace();}}

2、多链接随机跳转

public static void main(String[] args) throws IOException {String aesKey = "023382397f9848458967d2b5b9462205";Long userId = 18293l;SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {JSONObject jsonObject = new JSONObject();JSONObject head = new JSONObject();head.put("userId", userId);head.put("time", AesUtils.encrypt(time.format(new Date()), aesKey));jsonObject.put("head", head);// 设置多个链接,第一个链接比例为49%,第二个链接比例为51%JSONArray jsonArray = new JSONArray();JSONObject jo1 = new JSONObject();jo1.put("url","https://blog.csdn.net/qq_41175917/article/details/125956334");jo1.put("proportion","49");jsonArray.add(jo1);JSONObject jo2 = new JSONObject();jo2.put("url","https://blog.csdn.net");jo2.put("proportion","51");jsonArray.add(jo2);jsonObject.put("longUrl", AesUtils.encrypt(jsonArray.toJSONString(),aesKey));Connection.Response execute = Jsoup.connect("http://www.cyho.top/shortUrl/set").requestBody(jsonObject.toJSONString()).ignoreContentType(true).method(Connection.Method.POST).header("content-type", "application/json;charset=UTF-8").execute();System.out.println(execute.body());// 响应:{"msg":"success","code":0,"shortUrl":"www.cyho.top/SfMnI"}} catch (Exception e) {e.printStackTrace();}}

3、ip归属地跳转

public static void main(String[] args) throws IOException {String aesKey = "023382397f9848458967d2b5b9462205";Long userId = 18293l;SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {JSONObject jsonObject = new JSONObject();JSONObject head = new JSONObject();head.put("userId", userId);head.put("time", AesUtils.encrypt(time.format(new Date()), aesKey));jsonObject.put("head", head);// 设置多个链接JSONArray jsonArray = new JSONArray();JSONObject jo1 = new JSONObject();jo1.put("url","https://blog.csdn.net/qq_41175917/article/details/125956175");jo1.put("ipArea","浙江省杭州市");// 1代表ipArea只传递了省;2代表ipArea传递了省市;// ipArea为'其他'时,areaType可不传递jo1.put("areaType","2");jsonArray.add(jo1);JSONObject jo2 = new JSONObject();jo2.put("url","https://blog.csdn.net/qq_41175917/article/details/125921749");jo2.put("ipArea","江苏");jo2.put("areaType","1");jsonArray.add(jo2);JSONObject jo3 = new JSONObject();jo3.put("url","https://blog.csdn.net/qq_41175917/article/details/125956334");jo3.put("ipArea","其他");jsonArray.add(jo3);jsonObject.put("longUrl", AesUtils.encrypt(jsonArray.toJSONString(),aesKey));Connection.Response execute = Jsoup.connect("http://www.cyho.top/shortUrl/set").requestBody(jsonObject.toJSONString()).ignoreContentType(true).method(Connection.Method.POST).header("content-type", "application/json;charset=UTF-8").execute();System.out.println(execute.body());// 响应:{"msg":"success","code":0,"shortUrl":"www.cyho.top/S22Yf"}} catch (Exception e) {e.printStackTrace();}}



三、上方代码中使用到的aes加密与http工具类

1、其中JSON类是com.alibaba的,可以随便用其他代替,都一样的

        <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.78</version></dependency>

2、发送请求是使用的Jsoup,也可以用其他方式代替

        <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.12.1</version></dependency>

3、aes加密工具类

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;public class AesUtils {// 加密算法private static final String ENCRY_ALGORITHM = "AES";// 设置加密字符集private static final String CHARACTER = "UTF-8";private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";/*** AES 加密操作** @param content  待加密内容* @param password 加密密码* @return 返回Base64转码后的加密数据*/public static String encrypt(String content, String password) throws Exception {Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);byte[] byteContent = content.getBytes(CHARACTER);cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(password));byte[] result = cipher.doFinal(byteContent);return parseByte2HexStr(result);}/*** AES 解密操作** @param content* @param password* @return*/public static String decrypt(String content, String password) throws Exception {try {//实例化Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);//使用密钥初始化,设置为解密模式cipher.init(Cipher.DECRYPT_MODE, getSecretKey(password));//执行操作byte[] result = cipher.doFinal(parseHexStr2Byte(content));return new String(result, CHARACTER);} catch (Exception e){throw new Exception("解密失败");}}/*** 生成加密秘钥** @return*/private static SecretKeySpec getSecretKey(final String password) throws Exception {//返回生成指定算法密钥生成器的 KeyGenerator 对象KeyGenerator kg = null;kg = KeyGenerator.getInstance(ENCRY_ALGORITHM);SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");secureRandom.setSeed(password.getBytes());kg.init(128, secureRandom);SecretKey secretKey = kg.generateKey();return new SecretKeySpec(secretKey.getEncoded(), ENCRY_ALGORITHM);}/*** 将二进制转换成16进制** @param buf* @return*/public static String parseByte2HexStr(byte buf[]) {StringBuilder sb = new StringBuilder();for (int i = 0; i < buf.length; i++) {String hex = Integer.toHexString(buf[i] & 0xFF);if (hex.length() == 1) {hex = '0' + hex;}sb.append(hex.toUpperCase());}return sb.toString();}/*** 将16进制转换为二进制** @param hexStr* @return*/public static byte[] parseHexStr2Byte(String hexStr) {if (hexStr.length() < 1) {return null;}byte[] result = new byte[hexStr.length() / 2];for (int i = 0; i < hexStr.length() / 2; i++) {int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);result[i] = (byte) (high * 16 + low);}return result;}}

短链接生成接口、长链接转换短链接,可根据ip归属地个性化跳转、随机跳转相关推荐

  1. Python短链接生成、长链接还原,就是这么简单!

    问题引入 这个问题来自于一位群友的答疑.他的问题是这样的:如何找到一个短链接的原始URL地址.以此为基础,我准备写一篇文章,用Python如何实现长链接.短链接的相互转换. 长链接转短链接 实现长链接 ...

  2. php将长url转成短链接,php将URL长链接转换短链接的两种方法

    短网址(Short URL) ,顾名思义就是在形式上比较短的网址.在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更 ...

  3. 代码工具---长链接转换短链接

    方式一 缺点:数据加密性不好,容易被猜出来,比如,产生数据:00001.然后被恶意撞库00002 优点:严格的自增id,不会产生重复的短key maven 依赖 <dependency>& ...

  4. 短链接生成平台哪个好用

    短链接生成平台哪个好用? 短网址,又称短链接,短链接对于推广来说更容易传播和识别,如果不想辛辛苦苦发的链接,最后全部变成红色.失效,赶紧短链接管理用起来! 如何选择一个靠谱的短链接管理服务平台,亲测各 ...

  5. 短链接生成-短网址生成-短网址生成接口-短网址URL生成-短链接-短链接URL生成接口

    短链接生成-短网址生成-短网址生成接口-短网址URL生成-短链接-短链接URL生成接口[最新版]_数据API_数据应用-云市场-阿里云 如何生成短网址,短链接? 这为我们短信节约了巨额的成本 publ ...

  6. java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串...

    java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 1 package com.zdz.test; ...

  7. t.cn短链接生成 - 新浪短网址生成器压缩网址详细教程

    t.cn短链接是新浪官方的短网址工具,提供在线将长链接缩短为最短形式的t.cn链接服务,生成的短网址跳转速度和访问兼容性没有任何影响,生成好的短网址永久有效,还可以通过对接调用api接口和批量生成的方 ...

  8. 长链接转短链接java_新浪短网址API接口 - 长链接转短链接

    新浪短网址API接口是新浪对外公开的短网址生成接口,可以将长链接转短链接(生成的是 http://t.cn/xxxx 格式的),分享一个自己收藏的api接口,使用快一年了,一直都挺稳定的,觉得不错可以 ...

  9. 微信公众号开发------长链接转短链接接口

    1. 将一条长链接转成短链接. 主要使用场景: 开发者用于生成二维码的原链接(商品.支付二维码等)太长导致扫码速度和成功率下降,将原长链接通过此接口转成短链接再生成二维码将大大提升扫码速度和成功率. ...

  10. 黑色简洁的PHP短网址短链接生成源码 可在后台添加广告

    黑色简洁的PHP短网址短链接生成源码 可在后台添加广告 前端: 简洁.优雅.反应灵敏的设计 创建URL.创建自定义URL.密码保护的链接.链接统计.暗色主题.小书签.复制和共享链接 后端: 删除网址. ...

最新文章

  1. 构建一个react项目_您想要了解更多有关React的内容吗? 让我们构建一个游戏,然后玩。...
  2. 【ACM】杭电OJ 2063
  3. ionic开发中页面跳转隐藏底部Ttab
  4. 使用plsql创建定时任务并执行
  5. django foreign key 自动加_id问题
  6. java项目加减乘除验证码_课堂Java小程序(加减乘除与验证码)
  7. html5页面主题,HTML5页面开发笔记
  8. python使用hash256加密验证字符串
  9. 01、微信公众平台简介及资料文档
  10. jersey2.22.2异常java.lang.NoSuchMethodError: org.glassfish.jersey.CommonProperties.getValue
  11. 固定再计算机主机箱,一种计算机主机放置箱架的制作方法
  12. ps3自制linux,下BT聊QQ !PS3安装Linux ubuntu 7.10详细图文教程
  13. Spring基础-AOP-切入点详解
  14. 红帽Linux重置root密码
  15. 增强型MOS管工作相关问题
  16. LaTex论文排版 | (16)绘制程序流程图(框图)
  17. 月入2千到5万,是skycc营销软件在帮忙
  18. C#之父牛逼还是Java之父牛逼?
  19. Power bi 超市运营数据分析
  20. java调用海康人脸识别机5603的sdk的使用总结(四)

热门文章

  1. Navicat Premium 15 工具自动被杀毒防护软件删除解决方法
  2. 【“玩物立志”-scratch少儿编程】迷宫游戏-图片素材
  3. ubuntu+火狐浏览器+印象笔记+剪藏+国内版配置
  4. win7系统升级ie11,在KB2729094更新失败时的解决方法
  5. 电视机魔百盒显示连接服务器失败,【当贝市场】魔百盒EPG主页加载不出来办法详解...
  6. u盘魔术师装linux,u盘魔术师下载 u盘魔术师v6(USMv6) v6.0.2019.06.18 正式特别版 下载-脚本之家...
  7. 利用rancher轻松构建pass平台
  8. 小米笔记本linux系统下载软件,小米笔记本用什么系统 小米笔记本电脑将预装Linux系统...
  9. EXCEL的字符串处理公式,自带工作表函数汇总
  10. 计算机的编译原理pdf,计算机编译原理DK.pdf