2016-05-02 13 views
0

Ich habe vor kurzem mit AFNetworking begonnen und Probleme beim Empfangen von Antwortheadern von JSON-basierter Server-API. Unten ist der Teil des Codes, den ich geschrieben habe, um mit dem Server zu sprechen. Anfrage/Antwort ist ein JSON-Objekt.Keine vollständigen Antwortheader mit AFNetworking erhalten

Ausgabe: Beim Lesen der Antwortheader erhalte ich keine 2 zusätzlichen Sicherheitsschlüssel von meinem Server. Wenn ich traditionelles NSURLConnection oder neues NSURLSession benutze, bin ich in der Lage, sie zu erhalten, aber AFNetworking API erhält sie nicht zurück.

Irgendwelche Hinweise?

- (void)makeServerCall { 
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 

    // Set Request headers 
    NSDictionary *securityHeaders = [MyUtilities securityRequestHeaders]; 

    for (NSString *headerKey in securityHeaders) { 
     [manager.requestSerializer setValue:securityHeaders[headerKey] forHTTPHeaderField:headerKey]; 
    } 

    manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
    manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
    [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"application/json;charset=UTF-8"]; 

    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [manager.requestSerializer setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; 

    // Make Server Call 
    [manager POST:self.urlString parameters:self.postBody success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { 
     if (!self.skipSecurityHeaders) { 
      [MyUtilities securityResponseHeaders:[operation.response allHeaderFields]]; 
     } 

     NSLog(@"Received response for %@ \n Response Header %@ \n Response %@", self.urlString, [operation.response allHeaderFields], responseObject); 

     [self didFinishWithResult1:responseObject andResponse:operation.response]; 
    } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) { 
     NSLog(@"Error: %@", error); 
    }]; 
} 

Also, wenn ich [operation.response allHeaderFields] drucken, bekomme ich folgende Ausgabe:

Response Header { 
    "Cache-Control" = "private, must-revalidate"; 
    "Content-Language" = "en-US"; 
    "Content-Length" = 929; 
    "Content-Type" = "application/json;charset=UTF-8"; 
    Date = "Mon, 02 May 2016 09:12:52 GMT"; 
    Pragma = private; 
    Server = "Apache-Coyote/1.1"; 
    "Set-Cookie" = "NSC_JOuoxqqabim3ljwdrzxad5c42hiv0bf=ffffffff12a12ecc45525d5f4f58455e445a4a42378b;path=/;secure;httponly"; 
} 

, die 2 zusätzliche Tasten fehlen - key1 und key2 von meinem Server gesendet.

Antwort

0

Ok, habe es herausgefunden - ich habe Header gesetzt, bevor requestSerializer gesetzt wurde. So sollte der Fluss sein -

- (void)makeServerCall { 
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 

    manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
    manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
    [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"application/json;charset=UTF-8"]; 

    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [manager.requestSerializer setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; 

    // Set Request headers 
    NSDictionary *securityHeaders = [MyUtilities securityRequestHeaders]; 

    for (NSString *headerKey in securityHeaders) { 
     [manager.requestSerializer setValue:securityHeaders[headerKey] forHTTPHeaderField:headerKey]; 
    } 

    RUNNERLOG(@"Executing request for %@ \n Request Header %@ \n Request Body %@", self.urlString, securityHeaders, self.postBody); 

    // Make Server Call 
    [manager POST:self.urlString parameters:self.postBody success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { 
     if (!self.skipSecurityHeaders) { 
      [MyUtilities securityResponseHeaders:[operation.response allHeaderFields]]; 
     } 

     NSLog(@"Received response for %@ \n Response Header %@ \n Response %@", self.urlString, [operation.response allHeaderFields], responseObject); 

     [self didFinishWithResult1:responseObject andResponse:operation.response]; 
    } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) { 
     NSLog(@"Error: %@", error); 
    }]; 
}