【问题标题】:Error Domain=NSURLErrorDomain Code=-1017 "The operation couldn’t be错误域=NSURLErrorDomain Code=-1017 "无法执行该操作
【发布时间】:2015-02-12 01:28:07
【问题描述】:

我刚开始 ios 开发,我正在尝试与我的 api 交换数据。当我执行 POST 请求时,一切正常,但是当我尝试执行 GET 请求时,出现以下错误:

Error Domain=NSURLErrorDomain Code=-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:
    }
}

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    当我发送一个空标题时,例如 ["":""]。触发此错误 1017。

    解决方案,如果您已声明:

    让 headers = ["":""]

    最好的一个选项设置为零:

    让 headers = nil

    那么你可以:

    sessionManager.request( "www.example.com", 方法:.post, 参数:参数, 编码:编码, 标题:标题 ).responseJSON { 中的响应......

    【讨论】:

      【解决方案2】:

      这不是这种情况的直接解决方案,但可能会帮助出现-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)")
      }
      

      显然发送带有空键值的HTTPHeaderHTTPHeader(name: "", value: "") 会触发此错误。我调整了我的代码,改为返回nil,它解决了这个问题。

      【讨论】:

      • 在我的情况下,session 变量为空,因此标头值为 "Bearer "(Bearer 后面有空格,后面没有空格)。这个不完整的标头也导致了这个错误。
      【解决方案3】:

      当您使用主体集 (setHTTPBody) 执行 GET 请求时会发生此错误

      【讨论】:

        【解决方案4】:

        请检查此链接

        Alamofire.request(method, "(URLString)" , parameters: parameters, headers: headers).responseJSON { response in }
        

        在 post 方法中你还添加了

        parameters:parameters, encoding: .JSON
        

        (如果您在 GET POST 中添加了编码行,则会出现“无法解析响应”的错误)

        第二次请检查标题。

        ["authentication_token" : "sdas3tgfghret6grfgher4y"]
        

        然后解决了这个问题。

        【讨论】:

        • 这道题的格式需要清理一下。
        【解决方案5】:

        对于任何其他收到错误代码 -1017 的人——我通过在我的 http 请求中手动设置我的 http 标头来修复它。我认为服务器在解析 HTTP 标头时遇到问题,因为我的标头没有像这样的引号:Authorization : "1i2j12j",而不是字符串 "Authorization" : "qii2nl32j2l3jel"。祝你好运。

        类似这样的:

        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];
        

        【讨论】:

          【解决方案6】:

          如果您忘记提及 HTTPMethod,也可能发生错误,我遇到了问题“NSURLErrorDomain Code=-1017”,不知何故我忘记添加行“request.HTTPMethod = “POST”。

          添加该行后,我的代码运行良好。

          【讨论】:

            【解决方案7】:

            您的 JSON 参数有问题:

            kCFURLErrorCannotParseResponse = -1017

            【讨论】:

              猜你喜欢
              • 2015-07-01
              • 1970-01-01
              • 2022-07-01
              • 1970-01-01
              • 2015-11-14
              • 1970-01-01
              • 2017-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多