【发布时间】:2013-06-28 06:20:25
【问题描述】:
情况
- 使用 AFNetworking (NSURLConnection) 访问我的服务器 API
- API 需要使用令牌作为用户名的基本身份验证
- 令牌无效时 API 返回 HTTP 401
- 我在任何请求之前设置了基本身份验证标头
-
如果返回 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 并掩盖真正的响应
如何禁用身份验证质询响应机制,以便在不调用两次的情况下获得服务器响应?
【问题讨论】:
-
在请求中设置用户名和密码:[self.request setUsername:username]; [self.request setPassword:password];
-
@GauravPatel 在什么类上设置用户名?这如何禁用身份验证质询?
-
第一个请求如何设置认证?
-
@maccross
[self setAuthorizationHeaderWithUsername:@"token" password:@"x"]inAFHTTPClient -
@thejaz 你找到解决方案了吗?我正在研究完全相同的问题。我想自己处理 401,但 AFNetworking 正在尝试重新验证。以下关于如何实现覆盖该行为的方法的答案尚不清楚。谢谢。
标签: ios objective-c cocoa-touch nsurlconnection afnetworking