4

这是适用于 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 连接以及所有相应的爵士乐?

我可能调用了错误的方法吗?有没有办法通过客户端强制它?

还是有另一种更好的方法来为所有请求设置凭据?

任何帮助表示赞赏!谢谢!

4

0 回答 0