2012-03-28 1 views
2

У меня есть URL-адрес из rss-канала, который при просмотре в браузере перенаправляет на полный URL-адрес, содержащий идентификаторы, которые мне нужны в приложении. Есть ли способ в приложении, что я могу взять упрощенный URL-адрес, который поступает из фида (например, www.somesite.com/Thing1) и, по существу, переслать ссылку, чтобы получить полный URL-адрес (например, www.somesite.com/id= 21424255) все в приложении.iPhone SDK: получить переадресованный URL-адрес

ответ

2

Вам нужно будет сделать NSURLRequest на короткий URL-адрес и получить ответ. Вы хотите, чтобы это было как NSHTTPURLResponse - подкласс NSURLResponse Предположительно, если он выполняет перенаправление 301, вы можете прочитать заголовки ответов и получить URL-адрес из заголовка «Местоположение».

NSDictionary *headers = [myHTTPResponse allHeaderFields]; 
NSString *redirectLocation = [headers objectForKey:@"Location"]; 

Взгляните на this вопрос для более подробного примера создания NSURLConnection с просьбой.

Редактирование: Несмотря на то, что приведенный выше код является истинным для других полей заголовка, как указал Адам, ниже, вам нужно будет использовать метод делегата connection:willSendRequest:redirectResponse:, чтобы захватить местоположение перенаправления, когда перенаправление обрабатывается автоматически.

3

Если короткий URL-адрес перенаправляется на полный URL-адрес, NSURLConnection обрабатывает перенаправление прозрачно. Чтобы получить URL-адрес переадресации, вам необходимо реализовать

- (NSURLRequest *)connection: (NSURLConnection *)inConnection 
     willSendRequest: (NSURLRequest *)inRequest 
     redirectResponse: (NSURLResponse *)inRedirectResponse 

на делегате NSURLConnection. Целевой URL-адрес перенаправления: [inRequest URL]

Удачи.

1

Прежде всего, есть 3 способа узнать новое URL-соединение. (1) NSURLSession (2) NSURLConnection (3) NSURLDownload. Я использую здесь NSURLConnection, чтобы объяснить вам, как это сделать.

(1) Прежде всего, выберите URL, который перенаправляет (я выбираю здесь «http://www.google.com», потому что он будет перенаправлен на «http://www.google.co.in/?gws_rd=cr&ei=LEfeUvCeA8aLrQew04GICQ») .Теперь первым, создайте два свойства в файле .h, как показано ниже.

@interface ConfigViewController() 

    @property (nonatomic, retain) NSURLRequest *request; 
    @property (nonatomic, strong, readwrite) NSURLConnection *connection; 

@end 

(2) Затем синтезируйте свои свойства в формате .m.

@synthesize request; 
@synthesize connection = _connection; 

(3) Затем создайте NSURLRequest и NSURLConnection.

- (void)viewDidLoad{ 

    [super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 

    self.request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.google.com"]]; 
    assert(self.request != nil); 
    self.connection = nil; 
    self.connection = [NSURLConnection connectionWithRequest:request delegate:self]; 
    assert(self.connection != nil); 
} 

утверждает, убедитесь, что ваш подготовленный запрос не будет нулевым, если это будет ноль, то он будет показывать ошибку на этом месте только, то вы должны убедиться, что вы следуете этому коду правильно ,

(4) Теперь выполните эти две делегирования в вашем .h файле - NSURLConnectionDelegate & NSURLConnectionDataDelegate.

@interface WTViewController : UIViewController <NSURLConnectionDelegate, NSURLConnectionDataDelegate>{ 

IBOutlet UITextView *txtPreviousLbl; 
IBOutlet UITextView *txtNextlbl; 
} 

(5) Затем выполните эти 3 метода делегирования в файл .m (implementation).

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectedResponse{ 

    NSURLRequest *redirectedRequest = request; 
    if (redirectedResponse) { 
     redirectedRequest = nil; 
    } 
    NSLog(@"RedirectedRequest:%@",redirectedRequest); 
    return redirectedRequest; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ 
NSLog(@"error:%@",error); 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ 

    NSLog(@"Response:%@",response); 

    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 
    NSDictionary *responseDictionary = [httpResponse allHeaderFields]; 

    NSString *strNewURLLocation = [responseDictionary objectForKey:@"Location"]; 
    NSLog(@"ResponseDictionary:%@",[responseDictionary objectForKey:@"Location"]); 

    [[NSUserDefaults standardUserDefaults] setObject:strNewURLLocation forKey:@"serverurl"]; 
    NSLog(@"NewURLLocation:%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"serverurl"]); 
} 

Здесь вы получите новый URL-адрес в [[NSUserDefaults standardUserDefaults] objectForKey: @ "ServerURL"], Вы можете использовать NSUserDefaults или NSString для пользователей во всем вашем проекте. Примечание: Пожалуйста, не забудьте сделать этот код только в UIViewController.иначе может быть возможно, что ваша делегация не будет работать в других объектных файлах. Имейте счастливый код ...