2015-11-17 12 views
6

Sto utilizzando AFNetworking per eseguire una richiesta Web sull'API VolunteerMatch. Quando eseguo la richiesta, ricevo un codice di 200, tuttavia non ricevo una risposta. Ecco come una richiesta tipica VolunteerMatch assomiglia:Obiettivo API Volunteermatch C

GET /api/call?action=helloWorld&query=... HTTP/1.1 
Host: www.volunteermatch.org 
Accept-Charset: UTF-8 
Content-Type: application/json 
Authorization: WSSE profile="UsernameToken" 
X-WSSE: UsernameToken Username="acme", PasswordDigest="quR/EWLAV4xLf9Zqyw4pDmfV9OY=", 
Nonce="d36e316282959a9ed4c89851497a717f", Created="2003-12-15T14:43:07-0700" 

Here è la documentazione estesa.

Ecco il mio codice che sto usando per fare la mia richiesta:

// Create parameters 
    NSDictionary* param = @{ 
          @"action":@"helloWorld", 
          @"query":@"{\"name\":\"john\"}" 
          }; 

    // Create Manager 
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
    manager.requestSerializer = [AFJSONRequestSerializer serializer]; 

    // Add Headers 
    [manager.requestSerializer setValue:@"WWSE profile=\"UsernameToken\"" forHTTPHeaderField:@"Authorization"]; 
    [manager.requestSerializer setValue:[CocoaWSSE headerWithUsername:@"XXXXX" password:@"XXXXXXXXXXX"] forHTTPHeaderField:@"X-WSSE"]; 

    // Perform Request 
    [manager GET:@"http://www.volunteermatch.org/api/call" parameters:param success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { 
     NSLog(@"HTTP Request URL: %@", [operation.request URL]); 
     NSLog(@"HTTP Response Status Code: %ld", [operation.response statusCode]); 
     NSLog(@"HTTP Response Body: %@", responseObject); 
    } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) { 
     NSLog(@"HTTP Request failed: %@", error); 
    }]; 

Ecco la risposta che sto ottenendo:

2015-11-17 16:53:36.476 XXXXXX[85280:5969811] HTTP Response Status Code: 200 
2015-11-17 16:53:36.476 XXXXXX[85280:5969811] HTTP Response Body: (null) 
+0

Avere hai provato a emettere una richiesta identica al di fuori dell'app? Prova a utilizzare uno strumento esterno (ad esempio https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en) per verificare se il corpo previsto è effettivamente contenuto nella risposta. – kajot

risposta

5

cercare di integrare AFNetworking ultima versione 2.0 come guidato here & non dimenticare di aggiungere il file AFSecurityPolicy.h, AFSecurityPolicy.m. Questo supporterà le richieste https:.

4

Non è necessario prima serializzare la richiesta e quindi aggiungere nuove intestazioni. Le intestazioni non finiranno nella (serializzazione della) richiesta in quel modo. Probabilmente stai bene se lo inverti.

+0

Ho aggiornato il codice per quello che hai detto l'ho fornito nella domanda originale, tuttavia non ricevo ancora risposta – Prad

6

sto usando un metodo comune per AFNetworking WS Calling. Usi:

WS chiamata:

NSDictionary* param = @{ 
         @"action":@"helloWorld", 
         @"query":@"{\"name\":\"john\"}" 
         }; 

[self requestWithUrlString:@"URL" parmeters:paramDictionary success:^(NSDictionary *response) { 
    //code For Success 
} failure:^(NSError *error) { 
    // code for WS Responce failure 
}]; 

aggiungere due metodi: questi due metodi sono comuni, è possibile utilizzare questi metodo comune in tutto il progetto utilizzando la classe NSObject. aggiungere anche // definire il codice di errore come ...

definiscono kDefaultErrorCode 12345

- (void)requestWithUrlString:(NSString *)stUrl parmeters:(NSDictionary *)parameters success:(void (^)(NSDictionary *response))success failure:(void (^)(NSError *error))failure { 

[self requestWithUrl:stUrl parmeters:parameters success:^(NSDictionary *response) { 
    if([[response objectForKey:@"success"] boolValue]) { 
     if(success) { 
      success(response); 

     } 
    } 
    else { 
     NSError *error = [NSError errorWithDomain:@"Error" code:kDefaultErrorCode userInfo:@{NSLocalizedDescriptionKey:[response objectForKey:@"message"]}]; 
     if(failure) { 
      failure(error); 
     } 
    } 
} failure:^(NSError *error) { 
    if(failure) { 
     failure(error); 
    } 
}];} 

e // Set intestazioni in seguito Metodo (se necessario altrimenti rimuovere)

- (void)requestWithUrl:(NSString *)stUrl parmeters:(NSDictionary *)parameters success:(void (^)(NSDictionary *response))success failure:(void (^)(NSError *))failure { 

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
[manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; 


[manager.requestSerializer setValue:@"WWSE profile=\"UsernameToken\"" forHTTPHeaderField:@"Authorization"]; 



[manager GET:stUrl parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    if([responseObject isKindOfClass:[NSDictionary class]]) { 
     if(success) { 
      success(responseObject); 
     } 
    } 
    else { 
     NSDictionary *response = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil]; 
     if(success) { 
      success(response); 
     } 
    } 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
    if(failure) { 
     failure(error); 
    } 
}];} 

Per qualsiasi problema e altro Dettaglio please visit AFNetworking


UPDATE
---------- migrazione con AFNetworking 3.0 --------- migrare l'AFN-2,0-3,0 con alcune piccole modifiche per favore chaeck here AFN 3.0

+0

Quando eseguo queste richieste questo è l'errore che sto ricevendo questo errore '' 'Terminazione dell'app a causa dell'eccezione non rilevata 'NSInvalidArgumentException' , motivo: '*** - [__NSPlaceholderDictionary initWithObjects: forKeys: count:]: tenta di inserire nil object da oggetti [0]' '' ' – Prad

+0

okay, prova questo Ws in Poster o Rest client. la risposta è corretta o no. Ho una risposta che contiene elementi HTMl. per favore controlla e rispondi – Vvk

+0

ho provato, non ci sono risposte respinte dal lato WS. per favore aggiungi Successo e fallimento come {"successo": 1} o {"successo": 0} – Vvk