错误域= NSURLErrorDomain代码= -1017“操作不能

时间:2014-12-13 12:35:40

标签: ios objective-c

我刚刚开始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:
    }
}

7 个答案:

答案 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错误的人。

Alamofire4.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 { 响应....