2012-10-31 26 views
0

林的作品试图使POST请求与基本的认证服务器。我尝试了AFNetwork Library,它工作正常!因为我想使用Restkit,并且已经使用了很多东西,所以我试图对它做同样的事情,但它不起作用。我的代码看起来像这样:HTTP上Restkit基本身份验证失败,与AFNetwork

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=The certificate for this server is invalid. You might be connecting to a server that is pretending to be ####### HIDDEN ####### which could put your confidential information at risk., _kCFNetworkCFStreamSSLErrorOriginalValue=-9813, _kCFStreamPropertySSLClientCertificateState=0, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?

但我设置

disableCertificationValidation

为YES

我也试图在这里RestKit Pull遵循信息。但那也没有帮助。有没有人有想法,有什么可能是错的?随着AFNetwork库的代码或多或少是相同的,但工程。

回答

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); 
} 

也许这可以帮助别人。

0

我是新来RestKit为好,但我只是得到HTTP基本认证工作,主要利用你的榜样,这两个变化:

  • 你不需要disableCertificateValidation的基本认证,因为此方法仅在您使用SSL连接时才需要。所以删除那个。
  • 正如你同步发送请求,您不需要委托或接收器的方法,你可以简单地后评估的代码的响应一行。

如果还是不行,请检查您的网址是最终正确的,你的需求初始化和sendSynchronously

希望这有助于它为我工作之间添加NSLog(@"URL: %@", [[request URL] absoluteString]);

+0

我应该需要disableCertificateValidation,因为我有SSL连接。我尝试了一切,还在RestKit中添加了带有addRootCertificate的证书。一切都没有帮助。至少我自己添加了证书,没有RestKit API。 – NDY

0

在我的情况,我设置上RKClient disableCertificateValidation,但我用它使用了不同的RKClient一个RKObjectManager。以下线的伎俩:

[RKObjectManager sharedManager].client.disableCertificateValidation = YES;