我试图通过基本身份验证向服务器发送帖子请求。我在AFNetwork图书馆试了一下它就可以了!因为我想使用Restkit并且已经使用过,如果我尝试用它做很多事情,但它不起作用。我的代码看起来像这样:
RKClient *client = [[RKClient alloc] initWithBaseURL:URL];
client.username = @"username";
client.password = @"password";
client.authenticationType = RKRequestAuthenticationTypeHTTPBasic;
client.disableCertificateValidation = YES;
RKRequest *request = [client post:@"mypath" params:nil delegate:self];
[request sendSynchronously];
但是在代表中
- (void)request:(RKRequest *)request didFailLoadWithError:(NSError *)error {
我总是得到错误:
NSLocalizedDescription =此服务器的证书无效。您 可能连接到假装是#######的服务器 HIDDEN #######可能会使您的机密信息面临风险。, _kCFNetworkCFStreamSSLErrorOriginalValue = -9813,_kCFStreamPropertySSLClientCertificateState = 0,NSLocalizedRecoverySuggestion =您要连接到服务器吗? 呢?
但是我设置了
disableCertificationValidation
到YES
我也尝试按照此处的信息RestKit Pull。但这根本没有用。有谁有想法,有什么不对吗?使用AFNetwork库,代码或多或少相同,但有效。
答案 0 :(得分:0)
我也是RestKit的新手,但我只是使用了HTTP Basic Auth,主要是使用你的例子和这两个变化:
disableCertificateValidation
,因为只有在使用SSL连接时才需要此方法。所以删除那个。如果仍然无效,请在您的请求初始化和NSLog(@"URL: %@", [[request URL] absoluteString]);
sendSynchronously
,检查您的网址是否最终正确
希望这有帮助,它对我有用。
答案 1 :(得分:0)
至少,我没有得到RestKit的解决方案。我尝试了一切,还添加了带有addRootCertificates的证书,但RestKit总是得到相同的错误。 最后,我自己做了。
NSData* certData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"MyCert" ofType:@"cer"]];
[FileUtility addCertToKeychain:certData];
方法addCertToKeychain:
#pragma mark SSL Certification Methods
+ (void) addCertToKeychain:(NSData*)certInDer
{
OSStatus err = noErr;
SecCertificateRef cert;
cert = SecCertificateCreateWithData(NULL, (__bridge CFDataRef) certInDer);
assert(cert != NULL);
CFTypeRef result;
NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys:
(__bridge id)kSecClassCertificate, kSecClass,
cert, kSecValueRef,
nil];
err = SecItemAdd((__bridge CFDictionaryRef)dict, &result);
assert(err == noErr || err == errSecDuplicateItem);
CFRelease(cert);
}
可能对某人有所帮助。
答案 2 :(得分:0)
就我而言,我在RKClient上设置了disableCertificateValidation,但我使用的是一个使用不同RKClient的RKObjectManager。以下一行就是诀窍:
[RKObjectManager sharedManager].client.disableCertificateValidation = YES;