我希望用户从TinyURL或Tiny.cc服务或任何其他URL重定向器获得实际的URL。那么,我是否有可能从短重定向URL中获得实际的长URL,而无需在后台运行一个浏览器应用程序呢?
提前谢谢。
头:
#import "UntitledViewController.h"
@implementation UntitledViewController
- (id)init
{
self = [super init];
if (self)
{
NSURL *url = [NSURL URLWithString:@"http://tinyurl.com/a3cx"];
[self loadTinyURL:url];
}
return self;
}
- (void)loadTinyURL:(NSURL *)url
{
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
delegate:self];
if (!connection)
NSLog(@"could not connect with: %@", url);
}
- (NSURLRequest *)connection:(NSURLConnection *)connection
willSendRequest:(NSURLRequest *)request
redirectResponse:(NSURLResponse *)response
{
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
int statusCode = [httpResponse statusCode];
// http statuscodes between 300 & 400 is a redirect ...
if (response && statusCode >= 300 && statusCode < 400)
NSLog(@"redirecting to : %@", [request URL]);
return request;
}
@endImplementation:
//
// UntitledViewController.h
// Untitled
//
// Created by tushar chutani on 11-04-19.
// Copyright 2011 Fleetwood park secondary . All rights reserved.
//
#import <UIKit/UIKit.h>
@interface UntitledViewController : UIViewController {
}
- (void)loadTinyURL:(NSURL *)url;
@end发布于 2011-04-19 17:16:23
请查看以下代码:
#import "TinyURLHandler.h"
@interface TinyURLHandler (Private)
- (void)loadTinyURL:(NSURL *)url;
@end
@implementation TinyURLHandler
- (id)init
{
self = [super init];
if (self)
{
NSURL *url = [NSURL URLWithString:@"http://tinyurl.com/a3cx"];
[self loadTinyURL:url];
}
return self;
}
- (void)loadTinyURL:(NSURL *)url
{
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
delegate:self];
if (!connection)
NSLog(@"could not connect with: %@", url);
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
int statusCode = [httpResponse statusCode];
NSLog(@"%d : %@", statusCode, [NSHTTPURLResponse
localizedStringForStatusCode:statusCode]);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
[connection release];
NSLog(@"finished");
}
- (NSURLRequest *)connection:(NSURLConnection *)connection
willSendRequest:(NSURLRequest *)request
redirectResponse:(NSURLResponse *)response
{
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
int statusCode = [httpResponse statusCode];
// http statuscodes between 300 & 400 is a redirect ...
if (response && statusCode >= 300 && statusCode < 400)
NSLog(@"redirecting to : %@", [request URL]);
return request;
}
@end@ openingsposter:我不能百分之百确定你为什么想看原始的项目,我想是因为你想找出提取最终网址的好方法?我建议您创建一个委托,并在得到最终URL后通知调用方。如果你需要一个例子,我可以添加更多的源代码.
发布于 2011-04-19 15:48:45
NSURLConnection有一个回电话连接:willSendRequest:redirectResponse:。此时,您可以检查redirectResponse,以确定您要去哪里。
更新:
- (NSURLRequest *)connection:(NSURLConnection *)connection
willSendRequest:(NSURLRequest *)request
redirectResponse:(NSURLResponse *)redirectResponse
{
//Make sure tinyurl is doing the redirection
if([[[redirectResponse URL] host] compare:@"tinyurl.com"
options:NSCaseInsensitiveSearch] == NSOrderedSame)
{
NSLog(@"Redirect Location: %@", [request URL]);
}
//call [connection cancel]; to cancel the redirect and stop receiving data
//return nil; to cancel redirect but continue receiving data
//return request; will continue the redirection as normal
return request;
}https://stackoverflow.com/questions/5718975
复制相似问题