状况
如果它返回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];
}];
问题
我做了什么
cancelAuthenticationChallenge:
到willSendRequestForAuthenticationChallenge:
正在中止第二次调用,但是它会给出错误代码-1012(NSURLErrorUserCancelledAuthentication)而不是401,并掩盖真实的响应如何禁用身份验证质询响应机制,以便在不调用服务器响应的情况下获得服务器响应?
答案 0 :(得分:9)
您可以通过以下几种方式完全自定义身份验证处理:
利用课程setWillSendRequestForAuthenticationChallengeBlock:
中的setAuthenticationAgainstProtectionSpaceBlock:
和AFURLConnectionOperation
,并设置相应的块,您可以在其中定制所需的机制。
标题包含文档。
覆盖connection:willSendRequestForAuthenticationChallenge:
的子类中的AFURLConnectionOperation
。这将有效地覆盖AFNetworking中的完整身份验证机制设置。
请注意,您无法禁用“服务器验证客户端身份”身份验证质询 - 这是服务器的一部分。您必须为所请求的身份验证方法提供正确的凭据。
答案 1 :(得分:4)
试试这个。
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
SecTrustRef trust = challenge.protectionSpace.serverTrust;
NSURLCredential *cred;
cred = [NSURLCredential credentialForTrust:trust];
[challenge.sender useCredential:cred forAuthenticationChallenge:challenge];
}