2010-12-19 4 views

Antwort

4

UPDATE: Ich habe gerade Ihren Kommentar gesehen und erkannte, dass es die Umleitung folgt.

Siehe Delegatmethode: connection:willSendRequest:redirectResponse:, mit dem Sie es tut eine Umleitung auf diese neue Anforderung, auf der Grundlage der vorherigen Antwort erklärt.

Sie können die erweiterte URL entweder von der neuen Anforderung hier oder von der Standort-Kopfzeile der Weiterleitungsantwort abrufen.

Discussion If the delegate wishes to cancel the redirect, it should call the connection object’s cancel method. Alternatively, the delegate method can return nil to cancel the redirect, and the connection will continue to process. This has special relevance in the case where redirectResponse is not nil. In this case, any data that is loaded for the connection will be sent to the delegate, and the delegate will receive a connectionDidFinishLoading or connection:didFailLoadingWithError: message, as appropriate.

Ursprüngliche Antwort folgt ...

Verwenden NSURLConnection mit einem Delegierten. Rufen Sie in der Methode connection:didReceiveResponse: Ihres Stellvertreters allHeaderFields ab und lesen Sie den Wert des Headers "Location".

Etwas wie:

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    NSLog(@"Expanded URL = %@", [[(NSHTTPURLResponse *)response allHeaderFields] objectForKey:@"Location"]); 
} 

würde ich eine wenig URLExpander Klasse schafft dies persönlich zu tun, mit einer Signatur so etwas wie:

+(void)asyncExpandURL:(NSURL *)aURL didExpandTarget:(id)target selector:(SEL)selector; 

Dann wieder zwei Argumente in Ihrer Nachricht nur passieren, eine für die kurze URL, eine für die lange.

+0

Ich würde es ein Objekt machen und es nicht behalten das Ziel. Auf diese Weise können Sie das Objekt freigeben und dadurch die Anforderung abbrechen, wenn Ihr Objekt (z. B. das Dokument) nicht mehr vorhanden ist. –

+0

Hmmm ... scheint den Header "Location" nicht zu senden: –

+0

Verbindung: didReceiveResponse: { \t "Cache-Control" = "max-age = 300, muss revalidieren"; \t Verbindung = "Keep-Alive"; \t "Inhaltstyp" = "text/html; charset = UTF-8"; \t Date = "So, 19 Dec 2010 01:54:10 GMT"; \t Server = "Apache/2.2 "; \t" Set-Cookie "=" X-Mapping-edcdikko = AC17288FCF56ED010476BDE83D0C0E9D; path =/"; \t "Transfer-Encoding"= Identität; \t Vary = "Accept-Encoding, Cookie"; \t "Wp-Super Cache"= "Served supercache Datei von PHP"; \t} –

0

gibt es keine einfache Möglichkeit, müssen Sie den short-URL-Providing-Server anfordern und erhalten Sie die vollständige URL. Dies muss mit einer URL-Verbindung und vielleicht einige Logik hinter dem Umleiten Link (ich habe es noch nicht versucht)

+0

Es muss auch keine vollständige GET-Anfrage sein, HEAD sollte ausreichen. – bcarlso

Verwandte Themen