状况

  • 使用AFNetworking(NSURLConnection)访问我的服务器API
  • API需要使用 token 作为用户名
  • 的基本身份验证
  • token 无效时,API返回HTTP 401
  • 我在任何请求
  • 之前设置了基本身份验证 header
  • 如果返回401,请重试:
    AFHTTPRequestOperation *requestOperation = [MyHTTPClient.sharedClient HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
        processSuccessBlock(operation, responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        processFailureBlock(operation, error);
    
        if (operation.response.statusCode == 401)
            [MyHTTPClient.sharedClient refreshTokenAndRetryOperation:operation success:processSuccessBlock failure:processFailureBlock];
    }];
    

  • 问题
  • 当服务器返回带有基本身份验证质询的HTTP 401时,AFNetworking/NSURLConnection 发送相同的请求两次(初始请求,然后响应身份验证质询)
  • 但是由于上面我自己处理了HTTP 401的代码,因此完全不需要,我希望它停止自动回答身份验证挑战

  • 我尝试过的内容
  • cancelAuthenticationChallenge:willSendRequestForAuthenticationChallenge:进行响应正在中止第二个调用,但它给出的错误代码为-1012(NSURLErrorUserCancelledAuthentication)而不是401,并掩盖了真实的响应

  • 如何禁用身份验证质询响应机制,以便获得服务器响应而无需调用两次?

    最佳答案

    您可以使用一些选项来完全自定义身份验证处理:

  • 利用setWillSendRequestForAuthenticationChallengeBlock:类中的setAuthenticationAgainstProtectionSpaceBlock:AFURLConnectionOperation并设置相应的块,您可以在其中调整所需的机制。

    header 包含文档。
  • connection:willSendRequestForAuthenticationChallenge:的子类中覆盖AFURLConnectionOperation。这将有效覆盖AFNetworking中完整的身份验证机制设置。

  • 请注意,您不能禁用“服务器验证客户端身份”身份验证挑战-这是服务器的一部分。您必须为请求的身份验证方法提供正确的凭据。

    关于ios - NSURLConnection-禁用身份验证质询响应机制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17358438/

    10-11 22:14
    查看更多