我对 HTTP 基本身份验证有一个小问题。我有一些网络服务 (REST) 为我提供了一些 JSON。我既没有服务来源也没有访问该服务器的权限。
我可以使用正确的用户名和密码在服务器上进行身份验证。这是我正在使用的代码:
NSString *path = @"http://user:pwd@%bla.bla.com/api_key/";
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:path]];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:urlRequest
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSLog(@"Response: %@", JSON);
if (successBlock) {
successBlock(...);
}
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
if (errorBlock) {
errorBlock(error, JSON);
}
}];
[operation setAuthenticationChallengeBlock:^(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge) {
if (challenge.previousFailureCount == 0) {
NSURLCredential *credentials = [NSURLCredential credentialWithUser:username password:password
persistence:(NSURLCredentialPersistenceNone)];
[[challenge sender] useCredential:credentials forAuthenticationChallenge:challenge];
}
else {
//[[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge];
[[challenge sender] cancelAuthenticationChallenge:challenge];
NSLog(@"Login error: Are credentials correct?");
if (errorBlock) {
//errorBlock(challenge.error, challenge.failureResponse);
}
}
NSURLRequest* req = connection.currentRequest;
AFJSONRequestOperation* op = operation;
NSLog(@"hdr %@",challenge.error);
}];
[operation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse) {
NSLog(@"redirect");
return request;
}];
[operation start];
问题是我不知道如何在身份验证失败时获取服务器发送的额外数据(它发送额外的字符串来显示错误、用户名或密码)。我使用 Wireshark 应用程序使用错误的密码记录了所有 http 身份验证过程。
这是一次身份验证尝试的屏幕截图(密码错误):
我看到服务器确实发送了密码不正确的明文通知,但我不知道如何以及在哪里捕获它。
有任何想法吗?
提前谢谢。