代码之家  ›  专栏  ›  技术社区  ›  lifemoveson

AFNetworking:AFHTTPSessionManager:POST调用了两次

  •  1
  • lifemoveson  · 技术社区  · 8 年前

    我正在使用新的afnetworking 3.0库使用AFHTTPSessionmanager进行网络请求登录。因此,当我进行POST调用时,如果我得到401,响应中会有另一个网络请求被静默调用。

    我如何避免在失败回调时再次调用服务?

    [manager POST:[[urlReq URL] absoluteString] parameters:nil progress:nil success:^(NSURLSessionTask *operation, id responseObject)
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Rob    8 年前

    如果您收到身份验证挑战,您将看到第二个请求。

    如果需要,您可以简单地拒绝授权质询,这将停止第二个请求:

    [manager setTaskDidReceiveAuthenticationChallengeBlock:^NSURLSessionAuthChallengeDisposition(NSURLSession * _Nonnull session, NSURLSessionTask * _Nonnull task, NSURLAuthenticationChallenge * _Nonnull challenge, NSURLCredential *__autoreleasing  _Nullable * _Nullable credential) {
        return NSURLSessionAuthChallengeCancelAuthenticationChallenge;
    }];
    

    或者,如果您想继续进行身份验证,可以执行以下操作:

    [manager setTaskDidReceiveAuthenticationChallengeBlock:^NSURLSessionAuthChallengeDisposition(NSURLSession * _Nonnull session, NSURLSessionTask * _Nonnull task, NSURLAuthenticationChallenge * _Nonnull challenge, NSURLCredential *__autoreleasing  _Nullable * _Nullable credential) {
        if (challenge.previousFailureCount == 0) {
            *credential = [NSURLCredential credentialWithUser:self.user password:self.password persistence:NSURLCredentialPersistenceForSession];
            return NSURLSessionAuthChallengeUseCredential;
        }
    
        return NSURLSessionAuthChallengeCancelAuthenticationChallenge;
    }];
    

    这完全取决于您如何验证web服务上的用户。