ios objective-c iphone http afnetworking

ios - Volunteermatch API Objetivo C



objective-c iphone (3)

Estoy usando AFNetworking para realizar una solicitud web en la API VolunteerMatch. Cuando realizo la solicitud, recibo un código 200, sin embargo, no recibo una respuesta. Así es como se ve una solicitud típica de VolunteerMatch:

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 está la documentación extendida.

Aquí está mi código que estoy usando para hacer mi solicitud:

// 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); }];

Aquí está la respuesta que estoy obteniendo:

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)


Estoy usando uno de los métodos comunes para AFNetworking WS Calling. Usos:

Llame a WS:

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 }];

Agregue dos métodos: estos dos métodos son comunes, puede usar estos métodos comunes en todo el proyecto usando la clase NSObject. también agregue // defina un código de error como ...

define 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); } }];}

y // Establecer encabezados en el siguiente método (si es necesario, de lo contrario, eliminar)

- (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); } }];}

Para cualquier problema y más detalles , visite AFNetworking

ACTUALIZAR
---------- migrando con AFNetworking 3.0 --------- migre su AFN-2.0 a 3.0 con algunos pequeños cambios, consulte aquí AFN 3.0


Intente integrar AFNetworking última versión 2.0 como se AFNetworking aquí y no olvide agregar AFSecurityPolicy.h , archivo AFSecurityPolicy.m . Esto admitirá https: solicitudes.


No debe primero serializar la solicitud y luego agregar nuevos encabezados. Los encabezados no terminarán en la (serialización) de la solicitud de esa manera. Probablemente estés bien si inviertes eso.