2

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

4

3 回答 3

4

更新:我刚刚看到您的评论并意识到它遵循重定向。

请参阅委托方法: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。

于 2010-12-19T00:40:05.967 回答
0

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

于 2010-12-19T00:13:50.407 回答
-1

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

我可能会很快发布一些代码片段,特别是如果有兴趣的话。

于 2012-07-17T22:24:50.680 回答