我需要一些关于如何从一个简短的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 –