2010-03-25 2 views
4

Impossible d'obtenir l'en-tête "Location" à partir de la réponse. Wireshark dit que j'ai un:Obtention de l'en-tête "Location" à partir de NSHTTPURLResponse

Lieu: http: //*/index.html#0; sid = 865a84f0212a3a35d8e9d5f68398e535

Mais

NSHTTPURLResponse *hr = (NSHTTPURLResponse*)response; 
NSDictionary *dict = [hr allHeaderFields];   
NSLog(@"HEADERS : %@",[dict description]); 

génère ce:

HEADERS : { 
    Connection = "keep-alive"; 
    "Content-Encoding" = gzip; 
    "Content-Type" = "text/html"; 
    Date = "Thu, 25 Mar 2010 08:12:08 GMT"; 
    "Last-Modified" = "Sat, 29 Nov 2008 15:50:54 GMT"; 
    Server = "nginx/0.7.59"; 
    "Transfer-Encoding" = Identity; 
} 

Aucun lieu géographique. Comment l'obtenir? J'ai besoin de cette "petite" chose.

Répondre

5

NSHTTPURLResponse est une sous-classe de NSURLResponse de sorte que vous pouvez simplement demander URL. Cela renvoie un objet NSURL à partir duquel vous pouvez obtenir les composants d'URL tels que la requête, la chaîne de paramètres ou le fragment. Dans votre cas, vous voulez que le composant fragment:

NSURL* url = [response URL]; 
NSString* fragment = [url fragment]; 
//fragment should be: 0;sid=865a84f0212a3a35d8e9d5f68398e535 
+1

Merci beaucoup! Ça m'a aidé! =) – aspcartman

1

pensé qu'il pourrait être utile de compléter la réponse de @Rob Keniger un exemple de comment accéder au Situation tête à Swift. Comme indiqué plus haut, « Location » est un champ d'en-tête de réponse HTTP, de sorte à Swift cela peut se faire comme suit:

if let location = response.allHeaderFields["Location"] as? String 
{ 
    NSLog("Location \(location)") 
} 

response est de type NSHTTPURLResponse. Voir NSHTTPURLResponse Class Reference.

Questions connexes