example afhttprequestoperation iphone ios objective-c afnetworking afnetworking-2

iphone - afhttprequestoperation - AFNetworking 2.0 agrega encabezados a la solicitud GET



alamofire (7)

Aquí hay un ejemplo usando AFNetworking 2.0

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer = [AFJSONResponseSerializer serializer]; manager.requestSerializer = [AFJSONRequestSerializer serializer]; [manager.requestSerializer setValue:@"calvinAndHobbesRock" forHTTPHeaderField:@"X-I do what I want"]; [manager GET:@"http://localhost:3000" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }];

La clave son las 2 líneas siguientes:

manager.requestSerializer = [AFJSONRequestSerializer serializer]; [manager.requestSerializer setValue:@"calvinAndHobbessRock" forHTTPHeaderField:@"X-I-do-what-I-want"];

Acabo de empezar a usar AFNetworking 2.0 y me preguntaba cómo incluí los encabezados en una solicitud HTTP Get. La documentación establece un GET como este:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; NSDictionary *parameters = @{@"foo": @"bar"}; [manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }];

Pero como no NSURLRequests no estoy seguro de cómo configurar las cabeceras HTTP.

Cualquier ayuda sería apreciada.
Saludos,
Micro


Esto es lo que creo que es una mejor opción. En algún momento, configure un AFHTTPSessionManager utilizando NSURLSessionConfiguration y luego use ese AFHTTPSessionManager cada vez que desee realizar una solicitud.

NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; config.HTTPAdditionalHeaders = @{@"Accepts": @"application/json"}; mySingletonSessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:kMyBaseUrl] sessionConfiguration:config];


He usado este formulario para hacer una cita con un encabezado específico.

AFHTTPRequestOperationManager *operationManager = [AFHTTPRequestOperationManager manager]; [operationManager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; [operationManager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; [operationManager POST:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { if (success) { success(responseObject); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", [error description]); } ];


Hice esto ... para aquellos que están pasando token

[manager.requestSerializer setValue:[NSString stringWithFormat:@"Token token=/"%@/"", _userObj.oAuth] forHTTPHeaderField:@"Authorization"];


La fantástica documentación para AFNetworking 2.0 hace que sea un poco difícil de encontrar, pero está ahí. En AFHTTPRequestSerializer es AFHTTPRequestSerializer

Alternativamente, si sigue su enfoque recomendado de crear un administrador de sesión que se deriva de AFHTTPSessionManager , esa clase puede anular un método para modificar encabezados en cada solicitud -dataTaskWithRequest:completionHandler: Utilizo esto para inspeccionar las solicitudes y modificar encabezados caso por caso, y prefiero modificar el serializador, ya que mantiene la responsabilidad de la red contenida en ese administrador (y evita el borrado con singletons)

- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLResponse *, id, NSError *))completionHandler { static NSString *deviceId; if(!deviceId) { deviceId = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; } NSMutableURLRequest *req = (NSMutableURLRequest *)request; // Give each request a unique ID for tracing NSString *reqId = [NSString stringWithFormat:@"%@+%@", deviceId, [[NSUUID UUID] UUIDString] ]; [req setValue:reqId forHTTPHeaderField:"x-myapp-requestId"]; return [super dataTaskWithRequest:req completionHandler:completionHandler]; }


Use el siguiente código para poner cualquier tipo de valor de encabezado:

[[FRHTTPReqManager sharedManager].requestSerializer setValue:value forHTTPHeaderField:key];


la adición de respuestas y el serializador de solicitudes resolvió mi problema.

manager.responseSerializer = [AFJSONResponseSerializer serializer]; manager.requestSerializer = [AFJSONRequestSerializer serializer]; [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];