当前位置: 首页 > news >正文

使用Java做URL短连接还原长链接获取参数

为什么需要短连接

        这个很多人能理解,也有人不能理解,因为url地址再长,好像也没有多少能超出浏览器的限制(老版本的IE限制最为严格,大概2000个字符,服务端 限制大小最小的是Nginx,不超过4K,不过因版本而异)。但是我想没几个人能写一个url加上参数超过2000个字符吧?

        短连接流行的原因在于短,短了好记,当然了,一般也没人会记住,主要是复制、粘贴转发别人方便一些。一般都是域名加七八位字母数字组合,不会存在复制的时候少复制从而造成url不完整的情况。

        

短连接还原为长链接的方式

        这个原理很简单,一般请求一个短连接,服务器收到后短连接后会去查询短连接后面几个字母,然后根据查询还原为长链接,这里会存在一个HTTP Redirect动作,把短连接重定向到长链接,完成一次完整的请求。所以,我们在代码中要做的就是发送短连接,然后抓取Redirect的长链接。

        直接上关键代码:        

public static String expandUrl(String shortUrl) throws IOException {HttpURLConnection connection = (HttpURLConnection) new URL(shortUrl).openConnection();connection.setInstanceFollowRedirects(true); // 启用自动重定向,短链接转长链接有一个301重定向的动作connection.setRequestMethod("HEAD");connection.setConnectTimeout(50000); //请求超时时间,我抓的是一个海外的站点,所以设置的超时时间很长,这个根据自身要求调解即可int status = connection.getResponseCode();if (status == HttpURLConnection.HTTP_MOVED_PERM ||status == HttpURLConnection.HTTP_MOVED_TEMP) {String location = connection.getHeaderField("Location");if (location != null) {return location; // 递归处理多层重定向}}return "";}

提取长链接中的参数:

        我们一般拿长链接都是为了获取其中的参数。

        比如短连接为:https://www.csdn.net/E7FndD

        解析后的长链接为https://blog.csdn.net/love_99?spm=1011.2266.3001.5343  

        我们可能需要的是spm这个参数的值,所以写个方法拿出来即可,上代码:

/**这个方法用来拆解url中的参数和值,保存为map<key,value>模式
*/public static Map<String, String> parseParameters(String url)throws URISyntaxException, UnsupportedEncodingException {// 标准化URL处理URI uri = new URI(url.trim());String query = uri.getRawQuery();Map<String, String> params = new LinkedHashMap<>();if (query == null || query.isEmpty()) {return params;}// 拆分参数对String[] pairs = query.split("&");for (String pair : pairs) {int idx = pair.indexOf("=");String key = idx > 0 ?URLDecoder.decode(pair.substring(0, idx), "UTF-8") : pair;String value = idx > 0 && pair.length() > idx + 1 ?URLDecoder.decode(pair.substring(idx + 1), "UTF-8") : null;if (!key.isEmpty()) {params.putIfAbsent(key, value); // 保留首次出现的参数}}return params;}public static String getParaValue(){// 解析短连接得到长链接String longUrl = expandUrl(urlArray[i]);if (longUrl != null && !longUrl.isEmpty()) {Map<String, String> params = parseParameters(longUrl); //解析长链接中的参数if (!params.isEmpty()) {String paraValue=params.get("spm");return paraValue;}}return "";
}

至此,短连接还原长链接获取参数就完成了,剩余的就是各位有需要的复制粘贴代码,然后按照自己的需求修改代码得到自己满意的答案了。

http://www.dtcms.com/a/549006.html

相关文章:

  • 自己网站做电子签章有效么有哪些网站做汽车周边服务
  • 做网站去哪好在线表单 wordpress
  • 从信号零损耗到智能协同:高清混合矩阵全链路技术拆解,分布式可视化系统十大趋势重塑行业
  • 【超详细】MySQL事务面试题
  • Ubuntu(③vsftpd)
  • Ubuntu 25.10 发布,各种衍生版也发布
  • HUAWEI A800I A2 aarch64架构Ubuntu服务器鲲鹏920开启 IOMMU/SMMU 硬件虚拟化功能
  • GitHub 发布 Agent HQ:欢迎回家,智能体们
  • 使用 Python 将 PowerPoint 转换为 Word 文档
  • 怎么成立自己的网站公司网站建设案例
  • 做数码后期上数码网站企业推广文章
  • iOS 抓包工具实战 开发者的工具矩阵与真机排查流程
  • Spring Boot 整合第三方组件:Redis、MyBatis、Kafka 实战
  • 可视化图解算法66:两个数组的交集
  • 7 种方法:如何将视频从电脑传输到安卓手机
  • Qt GridLayout布局详解:从基础到高级技巧
  • BTreeMap 的 B-Tree 之心:性能与安全的 Rust 式演绎
  • 中国查公司的网站长沙 网站设计 公司
  • R 因子:深度解析其在统计学中的重要作用
  • Laravel 结合影刀 RPA 实现企业微信自动询单报价流程
  • Rust 入门之Rust 运算符全面解析:从基础到实战
  • Rust:借用 切片
  • 【Blender工具】
  • Spring Al学习6:嵌入模型 API
  • 坪山区住房和建设局网站wordpress能放视频
  • 网站承建商有哪些注册了一个域名怎么做网站
  • 我公司是帮企业做网站的_现在要帮客户们的网站备案微信公众营销平台开发
  • MPC模型预测控制:原理、设计与MATLAB实现
  • JavaEE初阶,网络编程篇
  • 基于中值滤波和高斯平滑的三维点云数据滤波matlab仿真