NSMutableDictionary * parameters = [NSMutableDictionary dictionaryWithCapacity:1];
/*
*参数在这里省去
/
sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
sessionManager.requestSerializer.timeoutInterval = requestTime; //设置请求超时时间
sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain", nil];
[sessionManager POST:[NSString stringWithFormat:@"%@api/v1/dog/dognewborn",URL_NEWGAME] parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSLog(@"%@",responseObject);
NSLog(@"mag = %@",[responseObject objectForKey:@"msg"]);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failure(task,error);
NSLog(@"error= %@",error);
long flag = error.code;
switch (flag) {
case -1009:
[MBProgressHUD showError:@"网络好像连接不上了,请重试"];
break;
case -1001:
[MBProgressHUD showError:@"请求超时,请稍后重试 "];
break;
default:
break;
}
}];
结果报以下错误:
Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: unauthorized (401)" UserInfo={com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x7b6023b0> { URL: http://****************/dognewborn } { status code:
401, headers {
"Content-Length" = 0;
Server = "Jetty(7.6.14.v20131031)";
} }, NSErrorFailingURLKey=http://******************/dognewborn, NSLocalizedDescription=Request failed: unauthorized (401), com.alamofire.serialization.response.error.data=<>}
401错误,网上提示说是没有权限访问该接口,甚是郁闷,看了安卓那边,发现他们调的接口,需要把token拼接到url后面即:[NSString stringWithFormat:@"%@api/v1/dog/dognewborn?token=%@",URL_NEWGAME,token]
安卓的网络请求框架是自动把token添加到接口后面,af需要自己拼上去,才能请求。改正后代码如下:
NSMutableDictionary * parameters = [NSMutableDictionary dictionaryWithCapacity:1];
/*
*参数在这里省去
/
sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
sessionManager.requestSerializer.timeoutInterval = requestTime; //设置请求超时时间
sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain", nil];
[sessionManager POST:[NSString stringWithFormat:@"%@api/v1/dog/dognewborn?token=%@",URL_NEWGAME,token] parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSLog(@"%@",responseObject);
NSLog(@"mag = %@",[responseObject objectForKey:@"msg"]);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failure(task,error);
NSLog(@"error= %@",error);
long flag = error.code;
switch (flag) {
case -1009:
[MBProgressHUD showError:@"网络好像连接不上了,请重试"];
break;
case -1001:
[MBProgressHUD showError:@"请求超时,请稍后重试 "];
break;
default:
break;
}
}];
最后请求成功,问题解决。
博客内容讲述了在使用AFNetworking进行POST请求时遇到401未经授权的错误。问题出在没有将token正确地添加到请求中。通过查看安卓端的实现,发现它们会自动将token拼接到URL后面。为了解决这个问题,iOS开发者需要手动将token添加到请求参数中,修正后的代码能够成功发送携带token的POST请求。

2万+

被折叠的 条评论
为什么被折叠?



