【问题标题】:How can we get complete url from the short url [duplicate]我们如何从短网址中获取完整的网址 [重复]
【发布时间】:2018-09-13 19:15:38
【问题描述】:

我有来自百度地图的sharable here,我想用短网址字符串获取完整的网址。我们怎么能做到这一点? 例如,如果我在重新加载后在浏览器中打开相同的链接“https://j.map.baidu.com/YwUSO”,我会得到一个完整的链接,如 https://map.baidu.com/?shareurl=1&poiShareUid=ecdb75e513cf93e16fa3ccc0

所以,我想在 IOS 应用程序中做同样的事情,我应该在应用程序中获得完整的 URL,我们如何实现。

【问题讨论】:

  • 你可以在WKWebKit的NavigationDelegate的func webView(WKWebView, didFinish: WKNavigation!) 得到它

标签: ios hyperlink


【解决方案1】:

你可以做什么,执行请求并检索URLResponseURL

let urlStr = "https://j.map.baidu.com/YwUSO"
let url = URL(string: "https://j.map.baidu.com/YwUSO")!

URLSession.shared.dataTask(with: url) { (data, urlResponse, error) in
    let expandedURL = urlResponse?.url?.absoluteString
    print("expandedURL GET: \(expandedURL ?? "Oops, not URL")")
}.resume()

还可以做并且应该更优化一点的是做一个“HEAD”请求(它不会下载与“GET”相反的内容),但是你需要使用URLRequest,而不仅仅是一个URL 并将其httpMethod 指定为“HEAD”。

let urlStr = "https://j.map.baidu.com/YwUSO"
let url = URL(string: "https://j.map.baidu.com/YwUSO")!
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "HEAD"

URLSession.shared.dataTask(with: urlRequest) { (data, urlResponse, error) in
    let expandedURL = urlResponse?.url?.absoluteString
    print("expandedURL HEAD: \(expandedURL ?? "Oops, not URL")")
}.resume()

请注意,出于测试目的,我打开包装很糟糕(使用“!”)。

【讨论】:

  • 谢谢,它的工作:)
【解决方案2】:

对于 iOS 应用,我希望您使用 UIWebView 来加载 URL。你的类应该符合 UIWebViewDelegate。然后使用下面的代码提取重定向的 URL

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request mainDocumentURL];
    NSLog(@"The Redirected URL is: %@", url);
    // Return YES if you want to load the page, and NO if you don't.
    return NO;
}

【讨论】:

    猜你喜欢
    • 2010-10-28
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    相关资源
    最近更新 更多