You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Spotify短链接扩展为完整URL?Swift实现难题求解

Spotify短链接解析的Swift解决方案问题

背景

2023年左右,Spotify推出短链接功能,导致不少开发者原有代码失效。这类短链接采用特殊的多次跳转逻辑,常规解析方式无法直接获取最终目标URL。

Python中的可行方案

Python可通过requests库的HEAD请求自动跟随重定向,轻松解析出最终URL,示例代码如下:

def expand_short_url(short_url_string):
    try:
        response = requests.head(short_url_string, allow_redirects=True)
        return response.url
    except Exception as e:
        # 可按需添加异常处理逻辑
        return None

相关技术社区中也有类似实现:

import requests
r = requests.head("<spotify.link url>", allow_redirects=True)
print(r.url)

Swift/SwiftUI中的解析困境

Swift的URL会话机制在处理这类特殊重定向时存在局限,无法完整获取最终目标URL。以下为测试案例:

  • 测试短链接:https://spotify.link/H6FTskvicDb
  • Chrome浏览器中最终跳转目标:https://open.spotify.com/playlist/5zPbGYMyILmVCty6TJ9mOO?si=IkYKRaG5S5-6S_QY0YEYeg&utm_source=copy-link&utm_medium=copy-link&nd=1&_branch_match_id=1159194084012404754&_branch_referrer=H4sIAAAAAAAAA8soKSkottLXLy7IL8lMq9TLyczL1vcwcwspzi7LTHZJAgAyNUUSIAAAAA%3D%3D
  • 当前Swift代码仅能解析到中间URL:https://spotify.app.link/H6FTskvicDb?_p=c11334dc9f057af2e21e90fce1b0

当前Swift实现代码:

func expandShortURL(shortURLString: String, completion: @escaping (String?) -> Void) {
    guard let url = URL(string: shortURLString) else {
        print("Invalid URL: \(shortURLString)")
        completion(nil)
        return
    }

    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    // 设置浏览器模拟User-Agent
    request.setValue("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36", forHTTPHeaderField: "User-Agent")

    let session = URLSession(configuration: .default, delegate: RedirectFollower(), delegateQueue: nil)
    session.dataTask(with: request) { _, response, error in
        if let error = error {
            print("URL Expansion Error: \(error.localizedDescription)")
            completion(nil)
            return
        }
        guard let httpResponse = response as? HTTPURLResponse,
              let finalURL = httpResponse.url else {
            print("Failed to get final URL")
            completion(nil)
            return
        }
        print("Final URL: \(finalURL.absoluteString)")
        completion(finalURL.absoluteString)
    }.resume()
}

class RedirectFollower: NSObject, URLSessionDelegate, URLSessionTaskDelegate {
    func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) {
        if let url = request.url, url.absoluteString.contains("open.spotify.com/playlist/") {
            // 识别到目标URL,停止跟随重定向
            completionHandler(nil)
        } else {
            // 继续跟随后续重定向
            completionHandler(request)
        }
    }
}

需求

尽管目前Spotify暂未大规模推广这类移动端短链接,但仍需找到Swift环境下能完整解析该类短链接的解决方案。

内容的提问来源于stack exchange,提问作者George Hayward

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:18:19