AFNetworking 2.0 总是 return 403
AFNetworking 2.0 always return 403
我正在使用 AFNetworking 2.0
为 JSON 发出 GET 请求
self.managerMasterFetchDeletes = [AFHTTPRequestOperationManager manager];
self.managerMasterFetchDeletes.requestSerializer.timeoutInterval = 4.0f;
self.managerMasterFetchDeletes.requestSerializer = [AFJSONRequestSerializer serializer];
self.managerMasterFetchDeletes.responseSerializer = [AFJSONResponseSerializer serializer];
NSURL *URL = [NSURL URLWithString:rest];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
op.responseSerializer = [AFJSONResponseSerializer serializer];
[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
if (operation.response.statusCode==200){
NSDictionary *dictionary = (NSDictionary*)responseObject;
NSMutableDictionary *responseData = [NSMutableDictionary new];
if ([dictionary objectForKey:@"responseData"]) {
responseData = [[dictionary objectForKey:@"responseData"] mutableCopy];
}
[responseData setValue:entity forKey:@"entityName"];
[responseData setValue:[NSNumber numberWithInt:timeStamp] forKey:@"lastSync"];
[[NSNotificationCenter defaultCenter]
postNotificationName:notification
object:nil userInfo:responseData];
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
NSArray *operations = [AFURLConnectionOperation batchOfRequestOperations:[arrayOperations copy] progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) {
NSLog(@"%lu of %lu fetch delete complete", numberOfFinishedOperations, totalNumberOfOperations);
} completionBlock:^(NSArray *operations) {
NSLog(@"All operations in batch complete");
[[NSNotificationCenter defaultCenter]
postNotificationName:@"MasterFecthDeleteEnd"
object:nil
userInfo:nil];
}];
[self.managerMasterFetchDeletes.operationQueue addOperations:operations waitUntilFinished:NO];
但总是 returns 403 错误:不可接受的内容类型:text/html
奇怪的是我用 Cocoa GraphicalHttpClient 做的同样的请求,没关系 returns JSON 响应和这个:
内容类型:application/json;字符集=UTF-8
日期:2015 年 9 月 25 日星期五 15:28:27 GMT
传输编码:身份
X-Powered-By: Servlet/2.5 JSP/2.1
非常感谢。
您的服务器似乎发送了 text/html ContentType。
要接受此类内容,请添加 text/html acceptableContentTypes
.
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
[manager GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}];
这意味着您的服务器正在发送 "text/html"
而不是已经支持的类型。我的解决方案是将 "text/html"
添加到 AFURLResponseSerialization
class 中设置的 acceptableContentTypes。只需搜索 "acceptableContentTypes" 并手动将 @"text/html"
添加到集合中。
op.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
当然,理想的解决方案是更改从服务器发送的类型,但为此您必须与服务器团队联系。
在你的情况下你可以这样做。
NSURL *URL = [NSURL URLWithString:rest];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
op.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
if (operation.response.statusCode==200){
NSDictionary *dictionary = (NSDictionary*)responseObject;
NSMutableDictionary *responseData = [NSMutableDictionary new];
if ([dictionary objectForKey:@"responseData"]) {
responseData = [[dictionary objectForKey:@"responseData"] mutableCopy];
}
[responseData setValue:entity forKey:@"entityName"];
[responseData setValue:[NSNumber numberWithInt:timeStamp] forKey:@"lastSync"];
[[NSNotificationCenter defaultCenter]
postNotificationName:notification
object:nil userInfo:responseData];
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
我正在使用 AFNetworking 2.0
为 JSON 发出 GET 请求 self.managerMasterFetchDeletes = [AFHTTPRequestOperationManager manager];
self.managerMasterFetchDeletes.requestSerializer.timeoutInterval = 4.0f;
self.managerMasterFetchDeletes.requestSerializer = [AFJSONRequestSerializer serializer];
self.managerMasterFetchDeletes.responseSerializer = [AFJSONResponseSerializer serializer];
NSURL *URL = [NSURL URLWithString:rest];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
op.responseSerializer = [AFJSONResponseSerializer serializer];
[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
if (operation.response.statusCode==200){
NSDictionary *dictionary = (NSDictionary*)responseObject;
NSMutableDictionary *responseData = [NSMutableDictionary new];
if ([dictionary objectForKey:@"responseData"]) {
responseData = [[dictionary objectForKey:@"responseData"] mutableCopy];
}
[responseData setValue:entity forKey:@"entityName"];
[responseData setValue:[NSNumber numberWithInt:timeStamp] forKey:@"lastSync"];
[[NSNotificationCenter defaultCenter]
postNotificationName:notification
object:nil userInfo:responseData];
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
NSArray *operations = [AFURLConnectionOperation batchOfRequestOperations:[arrayOperations copy] progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) {
NSLog(@"%lu of %lu fetch delete complete", numberOfFinishedOperations, totalNumberOfOperations);
} completionBlock:^(NSArray *operations) {
NSLog(@"All operations in batch complete");
[[NSNotificationCenter defaultCenter]
postNotificationName:@"MasterFecthDeleteEnd"
object:nil
userInfo:nil];
}];
[self.managerMasterFetchDeletes.operationQueue addOperations:operations waitUntilFinished:NO];
但总是 returns 403 错误:不可接受的内容类型:text/html
奇怪的是我用 Cocoa GraphicalHttpClient 做的同样的请求,没关系 returns JSON 响应和这个:
内容类型:application/json;字符集=UTF-8 日期:2015 年 9 月 25 日星期五 15:28:27 GMT 传输编码:身份 X-Powered-By: Servlet/2.5 JSP/2.1
非常感谢。
您的服务器似乎发送了 text/html ContentType。
要接受此类内容,请添加 text/html acceptableContentTypes
.
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
[manager GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}];
这意味着您的服务器正在发送 "text/html"
而不是已经支持的类型。我的解决方案是将 "text/html"
添加到 AFURLResponseSerialization
class 中设置的 acceptableContentTypes。只需搜索 "acceptableContentTypes" 并手动将 @"text/html"
添加到集合中。
op.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
当然,理想的解决方案是更改从服务器发送的类型,但为此您必须与服务器团队联系。
在你的情况下你可以这样做。
NSURL *URL = [NSURL URLWithString:rest];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
op.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
if (operation.response.statusCode==200){
NSDictionary *dictionary = (NSDictionary*)responseObject;
NSMutableDictionary *responseData = [NSMutableDictionary new];
if ([dictionary objectForKey:@"responseData"]) {
responseData = [[dictionary objectForKey:@"responseData"] mutableCopy];
}
[responseData setValue:entity forKey:@"entityName"];
[responseData setValue:[NSNumber numberWithInt:timeStamp] forKey:@"lastSync"];
[[NSNotificationCenter defaultCenter]
postNotificationName:notification
object:nil userInfo:responseData];
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];