这是适用于 iOS 的 Restkit v0.2.0。
我正在尝试通过设置 HTTP 客户端的默认凭据来使用 Windows 身份验证,以便在请求的身份验证受到质疑时它可以工作。
我这样做:
[[RKObjectManager sharedManager].HTTPClient setDefaultCredential:[NSURLCredential credentialWithUser:usr password:pass persistence:NSURLCredentialPersistenceForSession]];
然后我尝试获取我的对象:
[[RKObjectManager sharedManager].router.routeSet addRoute:[RKRoute routeWithClass:[Applications class] pathPattern:@"portfolio" method:RKRequestMethodGET]];
[RKObjectManager.sharedManager getObjectsAtPath:@"portfolio" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
{
NSLog(@"It Worked: %@", [mappingResult array]);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"It Failed: %@", error);
}];
但它不起作用,我总是得到“它失败”并且页面显示“无效凭据”。
所以我开始环顾四周,发现我需要响应身份验证挑战,但这已经完成了。如果我遍历执行此操作的方法,我的凭据为零(0x00000000)。我走过的方法是这样的:
- (void)connection:(NSURLConnection *)connection
didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;
所以我做了一些探索,发现 defaultCredentials 是在这个方法中设置的:
- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)urlRequest...
但不是这个,这是一个被称为:
- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
path:(NSString *)path
parameters:(NSDictionary *)parameters
所以我的凭据永远不会被设置,我不明白为什么。尤其是为什么它不使用 HTTPRequest 和 HTTPClient 连接以及所有相应的爵士乐?
我可能调用了错误的方法吗?有没有办法通过客户端强制它?
还是有另一种更好的方法来为所有请求设置凭据?
任何帮助表示赞赏!谢谢!