【问题标题】:Simplest way to get a long URL for a shortened URL in Cocoa?在 Cocoa 中获取缩短 URL 的长 URL 的最简单方法?
【发布时间】:2010-12-19 00:05:16
【问题描述】:

在 Cocoa 中检索短 URL 的原始 URL 的最简单方法是什么?几行就可以搞定什么?

【问题讨论】:

  • 首先,定义短网址。其次,除非您拥有原始 URL 的所有部分,否则您无法凭空提取它。

标签: objective-c cocoa short-url


【解决方案1】:

更新:我刚刚看到您的评论,并意识到它正在跟踪重定向。

查看委托方法:connection:willSendRequest:redirectResponse:,它告诉您它正在根据之前的响应重定向到这个新请求。

您可以从此处的新请求或重定向响应的 Location 标头中获取展开后的 URL。

讨论 如果代表希望 取消重定向,它应该调用 连接对象的取消方法。 或者,委托方法可以 返回 nil 以取消重定向,并且 连接将继续 过程。这在 没有redirectResponse的情况 零。在这种情况下,任何数据 为连接加载的将被发送 给代表,代表将 接收 connectionDidFinishLoading 或连接:didFailLoadingWithError: 消息,视情况而定。

原始答案如下...

NSURLConnection 与代表一起使用。在您的委托的 connection:didReceiveResponse: 方法中,获取 allHeaderFields 并读取“Location”标头的值。

类似:

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    NSLog(@"Expanded URL = %@", [[(NSHTTPURLResponse *)response allHeaderFields] objectForKey:@"Location"]);
}

我会创建一个小的 URLExpander 类来亲自执行此操作,其签名类似于:

+(void)asyncExpandURL:(NSURL *)aURL didExpandTarget:(id)target selector:(SEL)selector;

然后在您的消息中传回两个参数,一个用于短 URL,一个用于长 URL。

【讨论】:

  • 我会把它变成一个对象,让它不保留目标。这样,如果您的对象(例如文档)消失,您可以释放该对象,从而取消请求。
  • 嗯...似乎没有返回“位置”标题:
  • connection:didReceiveResponse: { "Cache-Control" = "max-age=300, must-revalidate";连接=“保持活动”; “内容类型”=“文本/html;字符集=UTF-8”;日期 =“星期日,2010 年 12 月 19 日 01:54:10 GMT”;服务器=“Apache/2.2”; “Set-Cookie”=“X-Mapping-edcdikko=AC17288FCF56ED010476BDE83D0C0E9D;路径=/”; “传输编码” = 身份; Vary = "接受编码,Cookie"; "Wp-Super-Cache" = "PHP 提供的超级缓存文件"; }
  • 刚刚为我的答案添加了更新。我没有意识到它会遵循重定向,但幸运的是有一个委托方法(多么方便!)。
  • 你没有发布 asyncExpandURL:didExpandTarget:selector: 实现代码!?! [表情包] ;) +1
【解决方案2】:

没有简单的方法,您必须请求 short-url-providing-server 并获取完整的 url。这必须通过 url 连接完成,并且可能需要一些逻辑来获取重定向链接(我还没有尝试过)

【讨论】:

  • 另外,它也不必是完整的 GET 请求,HEAD 就足够了。
【解决方案3】:

如果您不想发出请求并遵循重定向,更简单的方法是使用链接延长服务。以下是两个简单的 API:

如果有兴趣,我可能会尽快发布一些代码 sn-ps。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2022-01-26
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多