1

J'ai une connexion NSURLConnection qui se connecte à une API PHP que j'ai créée. Que l'API PHP répond avec des données. Comme il est une application dynamique, je le fais pour dire la longueur du contenu:NSURLResponse expectedContentLength -1

ob_start('scAPIHandler');  

function scAPIHandler($buffer){ 

    header('Content-Length: '.strlen($buffer)); 

    return $buffer; 

} 

Au début du fichier API, qui délivre alors plus tard tout ce qui est nécessaire. Cependant, lorsque les

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

feux de fonction, la valeur de response.expectedContentLength est -1. Lorsque j'essaie de me connecter non à mon API PHP, mais à certaines images sur le Web, la longueur de contenu attendue correcte est affichée. Est-il possible que mon API PHP indique à NSURLResponse la longueur du contenu à attendre? L'en-tête content-length ne semble pas fonctionner.

Merci d'avance!

Répondre

1

Ok, je l'ai compris. Je

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

    NSDictionary *responseHeaders = ((NSHTTPURLResponse *)response).allHeaderFields; 

    NSLog(@"headers: %@", responseHeaders.description); 

} 

cette méthode pour comprendre les en-têtes que mon application iOS recevait, et je les comparais avec les en-têtes qui s'enroulent imprimées lors de la connexion à la même URL. Il s'avère, il y avait une différence entre les en-têtes que la boucle a montré et que Objective-C a fait. Certes, il me dépasse beaucoup, et je ne sais pas pourquoi cela se passerait-il, mais je l'ai trouvé une solution:

ob_start('scAPIHandler');  

function scAPIHandler($buffer){ 

    header('Custom-Content-Length: '.strlen($buffer)); 

    return $buffer; 

} 

Le Custom-Content-Length ne semble en Objective-C, et je simplement pris mon en-tête personnalisé

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

    self.expectedContentLength = response.expectedContentLength; 
    self.receivedData.length = 0; 

    NSDictionary *responseHeaders = ((NSHTTPURLResponse *)response).allHeaderFields; 

    if(self.expectedContentLength < 0){ 

     // take my own header 

     NSString *actualContentLength = responseHeaders[@"Custom-Content-Length"]; 

     if(actualContentLength && actualContentLength.length > 0){ 

      self.expectedContentLength = actualContentLength.longLongValue; 

     } 

    } 

} 

et de remplacer la longueur de contenu attendue.