长链接(URL)转短链接(URL)
现在微博越来越流行,大家有事没事都喜欢在微博上说两句,但由于140字的限制,给我们在分析一些长链接的时候,带来了诸多不便,好在微博有自动缩短URL的功能,那我们是否可以自己缩短一个URL呢?答案是肯定的,下面就给出利用百度的API缩短URL的简单例子
package cn.bridgeli.longurl2short;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class LongURL2Short {
public static String httpRequest(String outputStr) {
StringBuffer buffer = null;
try {
// 建立连接
URL url = new URL("http://dwz.cn/create.php");
HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
httpUrlConn.setDoInput(true);
httpUrlConn.setDoOutput(true);
httpUrlConn.setUseCaches(false);
httpUrlConn.setRequestMethod("POST");
if (null != outputStr) {
OutputStream outputStream = httpUrlConn.getOutputStream();
// 注意编码格式,防止中文乱码
outputStr = "url=" + outputStr;
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
// 获取输入流
InputStream inputStream = httpUrlConn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
// 读取返回结果
buffer = new StringBuffer();
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
// 释放资源
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
httpUrlConn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return buffer.toString();
}
}
package cn.bridgeli.longurl2short;
import org.junit.Test;
import com.google.gson.Gson;
public class LongUrl2ShortTest {
@Test
public void testHttpRequest() {
String str = LongURL2Short.httpRequest("http://mp.weixin.qq.com/wiki/index.php?title=%E9%95%BF%E9%93%BE%E6%8E%A5%E8%BD%AC%E7%9F%AD%E9%93%BE%E6%8E%A5%E6%8E%A5%E5%8F%A3");
Gson gson = new Gson();
ShortUrl shortUrl = gson.fromJson(str, ShortUrl.class);
System.out.println(shortUrl.getTinyurl());
}
}
package cn.bridgeli.longurl2short;
public class ShortUrl {
private String tinyurl;
public String getTinyurl() {
return tinyurl;
}
public void setTinyurl(String tinyurl) {
this.tinyurl = tinyurl;
}
}
注:httpRequest方法和前一篇文章 如何用https协议发起一个post请求 极其类似,本质是一样的,另外该方法经本人测试会有bug:当长URL是.cn时,转换不成功,目前原因还没找到,猜测是由于转化后的URL的后缀也是.cn的原因,具体在测试。
参考:http://www.dwz.cn/cTGri
后来补充:经测试要转换的长URL最好用URLEncoder.encode(outputStr, “UTF-8”)编码一下,否则得到的缩短之后的URL可能不是我们想要的,也即是错误的,这个官方文档上并没有说明,也许是常识吧
全文完,如果本文对您有所帮助,请花 1 秒钟帮忙点击一下广告,谢谢。
作 者: BridgeLi,https://www.bridgeli.cn
原文链接:http://www.bridgeli.cn/archives/88
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
作 者: BridgeLi,https://www.bridgeli.cn
原文链接:http://www.bridgeli.cn/archives/88
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
分类: Java
近期评论