2010-03-12 38 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。

相關問題