【发布时间】:2010-12-19 00:05:16
【问题描述】:
在 Cocoa 中检索短 URL 的原始 URL 的最简单方法是什么?几行就可以搞定什么?
【问题讨论】:
-
首先,定义短网址。其次,除非您拥有原始 URL 的所有部分,否则您无法凭空提取它。
标签: objective-c cocoa short-url
在 Cocoa 中检索短 URL 的原始 URL 的最简单方法是什么?几行就可以搞定什么?
【问题讨论】:
标签: objective-c cocoa short-url
更新:我刚刚看到您的评论,并意识到它正在跟踪重定向。
查看委托方法: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。
【讨论】:
没有简单的方法,您必须请求 short-url-providing-server 并获取完整的 url。这必须通过 url 连接完成,并且可能需要一些逻辑来获取重定向链接(我还没有尝试过)
【讨论】:
如果您不想发出请求并遵循重定向,更简单的方法是使用链接延长服务。以下是两个简单的 API:
如果有兴趣,我可能会尽快发布一些代码 sn-ps。
【讨论】: