java 生成短链接

有时候,我们给用户发送一些短信中,涉及到url问题,如果一个url太长,那么很可能就是两条短信的内容。解决这个问题的方法就是缩短url的长度,如何来缩短呢,我想有两种方法来完成。

1. 生成一定长度字符串与url的映射
如:http://xxx/xxx/?code=123abc25
其中123abc25就是一个与url对应的编码,这样在后台接收后,根据映射取出url,再做重定向
操作。

2. 利用短链接来完成
这个在微博、微信中很常用,分享一个地址,不可能很长,就利用了这个原理,从最根本上它
是进行了重定向跳转操作。

下面通过一个例子来加以说明。


public class shortDemo {
public static HttpClient httpclient;
static {
// 构造 HttpClient
httpclient = new DefaultHttpClient();
}

public static String generateShortUrl(String url) {
try {
// 构造发送post请求
HttpPost httpost = new HttpPost("http://dwz.cn/create.php");
List<NameValuePair> params = new ArrayList<NameValuePair>();
// 传递请求参数
params.add(new BasicNameValuePair("url", url)); // 用户名称
httpost.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
// 发送请求并且获取执行结果
HttpResponse response = httpclient.execute(httpost);
// 获取结果内容
String jsonStr = EntityUtils
.toString(response.getEntity(), "utf-8");
// 将结果转成json对象
JSONObject object = JSON.parseObject(jsonStr);
// 获取短链接地址url
return object.getString("tinyurl");
} catch (Exception e) {
e.printStackTrace();
return "Error";
}
}

public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("http://pay.xiaojukeji.com/new_hb/EHongbao/gethongbao?id=56187735c4ce5&codes=b642e7801a6abaaf03e51f1489fc26e5&sign=C8B40FFB024CF9A5DCE99A9D6AD4071E");
System.out.println(generateShortUrl(list.get(0)));
}
}

最后的结果是http://dwz.cn/1X9xaw,是不是短多了呢。
生成链接可以通过以下几种方式实现: 1. 使用第三方链接服务API,比如新浪微博、腾讯、百度等都有提供链接服务的API,可以通过调用API将长链接转换为链接。 2. 自己实现链接生成算法,将长链接转换为一串字符串,比如将长链接的MD5值作为链接的标识符,再将标识符与链接域名组合成链接。需要注意的是,自己实现的链接算法需要保证生成链接是唯一的,且不易被猜测。 以下是一个使用自己实现的算法生成链接Java示例代码: ```java public class ShortUrlGenerator { private static final String BASE62 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; private static final int BASE = 62; public static String generate(String longUrl) { String md5 = DigestUtils.md5Hex(longUrl); String hex = md5.substring(0, 8); long hexLong = Long.parseLong(hex, 16); StringBuilder sb = new StringBuilder(); while (hexLong > 0) { int remainder = (int) (hexLong % BASE); sb.append(BASE62.charAt(remainder)); hexLong /= BASE; } return sb.toString(); } } ``` 使用方法如下: ```java String longUrl = "http://www.example.com/long/url"; String shortUrl = ShortUrlGenerator.generate(longUrl); System.out.println("Short URL: " + shortUrl); ``` 该算法使用MD5将长链接转换为一串16进制字符串,再将该字符串转换为10进制数字,最后将10进制数字转换为62进制字符串作为链接的标识符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值