我刚刚开始ios开发,我试图用我的api交换数据。当我做POST请求时一切正常,但是当我尝试执行GET请求时,我收到以下错误:
错误域= NSURLErrorDomain代码= -1017"操作不能 完成。 (NSURLErrorDomain错误-1017。)"的UserInfo = 0x145a2c00 {NSErrorFailingURLStringKey = http://myAPI.com/, _kCFStreamErrorCodeKey = -1,NSErrorFailingURLKey = http://myAPI.com, _kCFStreamErrorDomainKey = 4,NSUnderlyingError = 0x145b21d0"操作无法完成。 (kCFErrorDomainCFNetwork错误 -1017)"}
有人可以解释出现了什么问题以及如何解决问题吗?
我的要求:
-(void)hitApiWithURL:(NSString*)url HTTPMethod:(NSString*)HTTPMethod params:(NSDictionary*)params successBlock:(successTypeBlock)success failureBlock:(errorTypeBlock)failure{
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
[sessionConfig setHTTPAdditionalHeaders:@{@"Content-type": @"application/json"}];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
[request setHTTPMethod:HTTPMethod];
// The body
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
[request setHTTPBody:jsonData];
NSURLSessionDataTask *dataTaks = [session dataTaskWithRequest:request];
[dataTaks resume];
NSLog(@"dataTask started");
}
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didCompleteWithError:(NSError *)error {
if (error) {
//Gives my error
}
else {
// do something:
}
}
答案 0 :(得分:6)
您的JSON参数有问题:
kCFURLErrorCannotParseResponse = -1017
答案 1 :(得分:6)
如果您忘记提及HTTPMethod,也可能发生错误,我遇到问题" NSURLErrorDomain Code = -1017",不知何故我忘了添加行" request.HTTPMethod =&# 34; POST"
添加该行后,我的代码完美无缺。
答案 2 :(得分:4)
使用正文集(GET
)执行setHTTPBody
请求时会发生此错误
答案 3 :(得分:0)
对于任何其他收到错误代码-1017
的人 - 我通过在我的http请求中手动设置我的http标头来修复它。我认为服务器在解析HTTP标头时遇到问题,因为我的标题不是字符串"Authorization" : "qii2nl32j2l3jel"
,而是没有这样的引号:Authorization : "1i2j12j"
。祝好运。
这样的事情:
NSMutableDictionary* newRequestHTTPHeader = [[NSMutableDictionary alloc] init];
[newRequestHTTPHeader setValue:authValue forKey:@"\"Authorization\""];
[newRequestHTTPHeader setValue:contentLengthVal forKey:@"\"Content-Length\""];
[newRequestHTTPHeader setValue:contentMD5Val forKey:@"\"Content-MD5\""];
[newRequestHTTPHeader setValue:contentTypeVal forKey:@"\"Content-Type\""];
[newRequestHTTPHeader setValue:dateVal forKey:@"\"Date\""];
[newRequestHTTPHeader setValue:hostVal forKey:@"\"Host\""];
[newRequestHTTPHeader setValue:publicValue forKey:@"\"public-read-write\""];
//the proper request is built with the new http headers.
NSMutableURLRequest* request2 = [[NSMutableURLRequest alloc] initWithURL:request.URL];
[request2 setAllHTTPHeaderFields:newRequestHTTPHeader];
[request2 setHTTPMethod:request.HTTPMethod];
答案 4 :(得分:0)
请检查此链接
Alamofire.request(method, "(URLString)" , parameters: parameters, headers: headers).responseJSON { response in }
在post方法中你也可以添加
parameters:parameters, encoding: .JSON
(如果您将编码行添加到GET POST,则会出现错误"无法解析响应")
2请检查标题。
["authentication_token" : "sdas3tgfghret6grfgher4y"]
然后解决了这个问题。
答案 5 :(得分:0)
这不是解决此问题的直接方法,但可能会帮助遇到-1017
错误的人。
将Alamofire
从4.8.0
升级到5.2.2
后出现了这个问题。问题是HTTPHeader
。
var authorizationHeader: HTTPHeader {
guard let session = user?.session else {
return HTTPHeader(name: "", value: "")
}
return HTTPHeader(name: "Authorization", value: "Bearer \(session)")
}
显然发送带有空键值即HTTPHeader
的{{1}}会触发此错误。我调整了代码,改为返回HTTPHeader(name: "", value: "")
,它解决了问题。
答案 6 :(得分:0)
对于我来说,当发送一个像 ["":""] 这样的空标题时。触发此错误 1017。
解决方案,如果您已声明:
let headers = ["":""]
最好的一个选项设置为零:
let headers = nil
然后你可以:
sessionManager.request( "www.example.com", 方法:.post, 参数:参数, 编码:编码, 标题:标题 ).responseJSON { 响应....