AFNetWorking 的Header的传值
首先分享下我们的AFNetWorking的数据封装
1,创建一个AFNetWorkingClient类继承自AFHTTPSessionManager
2,该类文件单例的实现
+ (instancetype)shareAFNetworkingClient{
static AFNetWorkingClient *client = nil ;
static dispatch_once_t once ;
dispatch_once(&once, ^{
client = [[self alloc] initWithBaseURL:[NSURL URLWithString:nil]] ;
client.securityPolicy.allowInvalidCertificates = YES ;
client.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html",@"text/json",@"text/javascript",@"multipart/form-data", nil];
});
return client ;
}
3,数据请求的封装
Post:
+(void)PostTheDataFromServer:(NSString *)URLString parameters:(id)parameters success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure{
AFNetWorkingClient *client = [AFNetWorkingClient shareAFNetworkingClient];
[client POST:[NSString stringWithFormat:@"%@%@",K_Api_Prefix,URLString] parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {
success(responseObject) ;
} failure:^(NSURLSessionDataTask *task, NSError *error) {
failure(error) ;
}];
}
Get:
+ (void)GetTheDataFromServer:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(id responseObject))success
failure:(void (^)(NSError *error))failure{
AFNetWorkingClient *client = [AFNetWorkingClient shareAFNetworkingClient];
[client GET:[NSString stringWithFormat:@"%@%@",K_Api_Prefix,URLString] parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {
success(responseObject) ;
} failure:^(NSURLSessionDataTask *task, NSError *error) {
failure(error) ;
}];
}
4,数据请求接口的调用
[AFNetWorkingClient PostTheDataFromServer:postUrl parameters:dict success:^(id responseObject) {
} failure:^(NSError *error) {
}];
回到正题,关于HTTPHeader的传值的方法
因为AFHTTPSessionManager有一个requestSerializer属性,该属性有一个
- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field {
[self.mutableHTTPRequestHeaders setValue:value forKey:field];
}
可以做在传值的时候直接调用,比如
[client.requestSerializer setValue:[NSString stringWithFormat:@"%d", (long)[[NSDate date] timeIntervalSince1970]]forHTTPHeaderField:@"RequestTime"];
我传的是一个时间戳。
既然传值就要有怎么接收值
if ([URLString rangeOfString:@"goods/front/pagelist"].location != NSNotFound) {
NSHTTPURLResponse *responseTask = (NSHTTPURLResponse *)task.response;
if ([responseObject isKindOfClass:[NSDictionary class]] && ((NSDictionary*)responseObject).count > 0) {
[dataDict setValuesForKeysWithDictionary:responseObject];
[dataDict setObject:responseTask.allHeaderFields[@"RequestTime"] forKey:@"RequestTime"];
}
}
我是把NSURLSessionDataTask强转成NSHTTPURLResponse,进行allHeaderFields方法的获取