在 Cocoa 中检索短 URL 的原始 URL 的最简单方法是什么?几行就能搞定的事?
3 回答
更新:我刚刚看到您的评论并意识到它遵循重定向。
请参阅委托方法:connection:willSendRequest:redirectResponse:
,它告诉您它正在根据先前的响应重定向到这个新请求。
您可以从此处的新请求或重定向响应的 Location 标头中获取扩展的 URL。
讨论如果代理希望取消重定向,它应该调用连接对象的取消方法。或者,委托方法可以返回 nil 以取消重定向,并且连接将继续处理。这在 redirectResponse 不为零的情况下具有特殊的相关性。在这种情况下,为连接加载的任何数据都将发送给委托,委托将根据需要接收 connectionDidFinishLoading 或 connection: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:
我可能会很快发布一些代码片段,特别是如果有兴趣的话。