我需要一些關於如何從一個簡短的URL檢索完整的幫助。
例如:http://tinysong.com/HJ9h
如果您單擊該鏈接會打開一個URL的Grooveshark。我如何檢索原始grooveshark網址?
謝謝如何從一個完整的URL檢索? Xcode
3
A
回答
3
短網址的HTTP重定向的工作。您可以使用短網址請求設置NSURLConnection
並設置代理。在委託,實施方法:
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response;
如果response
是非nil
,這是一個重定向。您可以檢查響應。您可以使用-isKindOfClass:
來檢查它是否爲NSHTTPURLResponse
的實例,然後從中獲取其他數據。
此外,您還可以檢查新request
是NSURLConnection
建議。它的URL
屬性將是服務器重定向您的連接請求的新URL。
如果您被重定向並且您有理由相信您不會被重定向,並且您完全感興趣,那麼您可以通過在連接對象上調用-cancel
來取消連接請求。
更新。下面是一些示例代碼:
#import <Foundation/Foundation.h>
static BOOL stop;
@interface MyDelegate : NSObject
@end
@implementation MyDelegate
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response
{
NSLog(@"request %@", request);
NSLog(@"response %@", response);
return response ? nil : request;
}
- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"%s: error %@", __func__, error);
stop = TRUE;
}
- (void) connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"%s", __func__);
stop = TRUE;
}
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSURLRequest* req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://tinysong.com/HJ9h"]];
MyDelegate* del = [[MyDelegate alloc] init];
[NSURLConnection connectionWithRequest:req delegate:del];
while (!stop)
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
[pool drain];
return 0;
}
產生這樣的輸出:
request <NSURLRequest http://tinysong.com/HJ9h>
response (null)
request <NSURLRequest http://grooveshark.com/#!/s/~/3Xl6OQ?src=11>
response <NSHTTPURLResponse: 0x103500340>
-[MyDelegate connectionDidFinishLoading:]
0
0
一個簡單的方法來做到這一點從終端
curl --head shorturl
這將只顯示短頭,你可以看到在那裏的網址。
例如
$ curl --head http://tinysong.com/HJ9h
HTTP/1.1 301 Moved Permanenty
Server: sharkattack!
Date: Sat, 05 May 2012 22:13:10 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
Set-Cookie: TinysongSessionID=4518ef13c93199344a23bb9fe9af3e98; expires=Sat, 02-May-2015 22:13:10 GMT; path=/
Location: http://grooveshark.com/#!/s/~/3Xl6OQ?src=11
Cache-Control: max-age=300
Expires: Sat, 05 May 2012 22:18:10 GMT
Vary: Accept-Encoding
X-Hostname: rhl082
X-N-Hostname: RHL082
而且你可以看到它指向的是在Location
領域的網址。
因此,使用這種帶有NSTask會給你一個結果字符串,你可以工作。
0
提供該服務使用HTTP 301,302一個303重定向你可以做一個HTTP請求到初始網址...
如果響應頭返回301,302或303重新再作要求在指定的新位置header ...然後你會重複這個,直到狀態碼是別的東西,比如200 ...
然後你可以從響應頭和volatile讀取主機和路徑,你有你的長URL ..
現在獲得頭方面......我用ASIHTTPRequest爲我所有的網絡需求...http://allseeing-i.com/ASIHTTPRequest/How-to-use它有一個選項來跟隨重定向,所以我認爲如果你提出請求,你將能夠讀取ResponseHeaders並獲得長URL。
希望有所裨益
相關問題
- 1. 如何使用PHP從地址欄中檢索完整的URL?
- 2. 如何從一個按鈕檢索URL?
- 3. 從URL檢索整個歌詞
- 4. 如何檢索[]符文的第一個「完整」字符?
- 5. 如何檢索完整的Zend_Http_Client GET URI?
- 6. 如何檢索URL的整數部分?
- 7. 如何從SPWEB獲取完整的URL
- 8. 如何從URI獲取完整的URL?
- 9. 如何在不使用完整url的情況下從另一個子域上的文件夾檢索文件
- 10. 如何從Lucene.Net.Store.Directory中檢索完整的目錄路徑?
- 11. 如何從ColdFusion的url中檢索一個id?
- 12. Ruby - 從URL中檢索一個參數
- 13. 如何使用jquery.load檢索html /或完整html的一部分?
- 14. 一個完整的URL重寫的.htaccess
- 15. 完整的URL從FSCopyURLForVolume
- 16. 在Twitter中檢索完整URL搜索API
- 17. 從一個變量中檢索整數
- 18. nginx.conf redirecta一個完整的url
- 19. 只保留一個完整的URL
- 20. 檢索從URL
- 21. 如何檢索帶參數的整個URL?
- 22. 正在檢索完整數
- 23. 如何從Firebase數據庫檢索完整用戶列表?
- 24. 如何解析從URL檢索的JSON?
- 25. 如何從Perl中的相對URL中找到完整的URL?
- 26. 如何從python中的資源URL獲取完整的URL
- 27. 如何檢索URL
- 28. 從Bolt協議完成的查詢中檢索完整對象
- 29. 的Xcode - 如何從URL
- 30. 如何在ASP MVC編碼一個完整的URL字符串
我試過使用它,該方法是完美的工作。但我有一個問題。在該方法裏面檢索url的命令是什麼?示例代碼會很好。謝謝 –
這應該提供新的URL:'[請求URL]'。 –
我嘗試過,但它繼續給我http://tinysong.com/HJ9h –