2010-03-12 42 views
3

我想确定一个简短的URL的长URL是什么。我尝试过使用http HEAD请求,但返回的头部字段实际上只包含与目标/长url有关的任何数据。如何从一个简短的URL获得一个长的URL

是否有: 1.任何方式来确定长URL? 2.如果是这样,是否可以在不下载目的地主体的情况下完成?

谢谢

+2

什么是长URL和什么是短URL?是http://stackoverflow.com/长或短? :) – 2010-03-12 18:28:53

+1

我通过简短的网址假设他指的是URL缩短服务,如tinyurl.com或bit.ly – Jonathan 2010-03-12 18:29:50

+0

我假设他是指来自URL缩短服务的URL。您应该可以通过查看对URL的请求的响应标题而无需实际开始流式传输正文。 – 2010-03-12 18:29:57

回答

5

执行HEAD并查找Location标头。

% telnet bit.ly 80 
Trying 168.143.173.13... 
Connected to bit.ly. 
Escape character is '^]'. 
HEAD /cwz5Jd HTTP/1.1 
Host: bit.ly 

HTTP/1.1 301 Moved 
Server: nginx/0.7.42 
Date: Fri, 12 Mar 2010 18:37:46 GMT 
Content-Type: text/html; charset=utf-8 
Connection: keep-alive 
Set-Cookie: _bit=4b9a89fa-002bd-030af-baa08fa8;domain=.bit.ly;expires=Wed Sep 8 14:37:46 2010;path=/; HttpOnly 
Location: http://www.engadget.com/2010/03/12/motorola-milestone-with-android-2-1-hitting-bulgaria-by-march-20/?utm_source=twitterfeed&utm_medium=twitter 
MIME-Version: 1.0 
Content-Length: 404 
+0

这样结束了是最正确的答案。完整的答案包括按照这个答案中的建议做一个头像请求。包含位置标题的响应可以从“连接willSendRequest ....”委托方法中提取,而不是didReceiveResponse委托方法。 – RunLoop 2010-03-13 03:09:04

+0

HEAD并不总是有效,但GET通常会这样。 GET唯一的警告就是连接必须在URL提取之后被取消以防止下载身体(如Seva下面所建议的) – RunLoop 2010-03-13 03:27:58

+0

JK:你的意思是'connection:willSendRequest:redirectResponse:'。我认为你的评论是错误的,直到我查阅并看到选择器的第三个组件。 – 2010-03-13 05:37:21

6

发出HTTP GET请求,不遵循重定向,分析Location头。这就是重定向的目标。

特别是在Cocoa中,对委托使用异步请求,处理委托中的didReceiveResponse。第一个响应将是重定向。一旦您在处理程序中提取URL,请在连接上调用[cancel]。

编辑:根据提供者,HEAD而不是GET可能会或可能无法工作。如果你不遵循重定向,响应数据将不会被加载,所以没有传输开销的GET。

相关问题