首页 > Java > 长链接(URL)转短链接(URL)

长链接(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可能不是我们想要的,也即是错误的,这个官方文档上并没有说明,也许是常识吧

分享到:
作 者: BridgeLi,http://www.bridgeli.cn/
原文链接:https://www.bridgeli.cn/archives/88
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
分类: Java 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.