HTTP基本身份验证存在一个小问题。 我有一些Web服务(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身份验证过程。
以下是一次身份验证尝试的屏幕截图(密码错误):
我看到服务器确实发送了明文密码不正确的通知,但我不知道如何以及在何处捕获密码。
有什么想法吗?
提前谢谢。