长链接(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
近期评论