Java 2023-12-03 445

Java实现URL短链接还原与参数提取

老张

资深系统架构师

在实际开发中,经常需要处理短链接还原和URL参数提取的需求。本文分享一个完整的Java实现方案。

需求背景

短链接服务(如bit.ly、t.cn等)通过HTTP重定向将短链接转换为原始URL。我们需要:

  • 还原短链接到原始URL
  • 提取URL中的参数
  • 处理多次重定向

实现方案

1. 短链接还原

// UrlUtils.java
public class UrlUtils {
    public static String expandShortUrl(String shortUrl) {
        HttpURLConnection connection = null;
        try {
            URL url = new URL(shortUrl);
            connection = (HttpURLConnection) url.openConnection();
            connection.setInstanceFollowRedirects(false);
            String location = connection.getHeaderField("Location");
            return location != null ? location : shortUrl;
        } finally {
            if (connection != null) connection.disconnect();
        }
    }
}

2. URL参数提取

public static Map<String, String> extractParams(String url) {
    Map<String, String> params = new HashMap<>();
    URL urlObj = new URL(url);
    String query = urlObj.getQuery();
    if (query != null) {
        String[] pairs = query.split("&");
        for (String pair : pairs) {
            String[] keyValue = pair.split("=");
            if (keyValue.length == 2) {
                params.put(keyValue[0], keyValue[1]);
            }
        }
    }
    return params;
}

使用示例

String shortUrl = "https://bit.ly/xxxxx";
String fullUrl = UrlUtils.expandShortUrl(shortUrl);
Map<String, String> params = UrlUtils.extractParams(fullUrl);

System.out.println("原始URL: " + fullUrl);
System.out.println("参数: " + params);

注意事项

  • 设置合理的超时时间
  • 处理多次重定向的情况
  • 注意URL编码问题
  • 异常处理要完善

总结

通过HttpURLConnection和URL类,我们可以轻松实现短链接还原和参数提取功能。这个工具类在实际项目中非常实用。

分享: