2009-11-11 84 views
5

通过iphone学习连接到ssl web服务的最佳起点是什么?iPhone - SSL连接

到目前为止,我通过SOAP等通过http做了一些基本的连接,但我对https没有经验。任何良好的来源,教程,起始参考,“使用nsurl ...类”的赞赏

回答

5

NSURLConnection默认情况下使用SSL和可以访问https站点。可能会出现有关让用户信任SSL证书的问题,here对此的讨论我发现很有趣。

0

结账ASIHTTPRequest。它是非常稳定,无泄漏,易于使用,包括一堆好东西,如下载文件恢复,进度条支持等...它也有认证支持

+0

是身份验证安全加密或如何我能理解这一点吗?谢谢 – 2012-10-13 15:57:23

+0

这是一个非常古老的答案,ASIHTTPRequest不再被维护。尝试https://github.com/AFNetworking/AFNetworking – coneybeare 2012-10-14 14:41:16

1

我发布了一个示例https客户端。它会忽略服务器证书无效。 服务器具有webget法uritemplate =用户名({用户代码})/密码({密码})

可以使用CharlesProxy检查您的传出消息

#import "Hello_SOAPViewController.h" 
@interface NSURLRequest (withHttpsCertificates) 
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host; 
+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host; 
@end 

@implementation Hello_SOAPViewController 


NSMutableData *webData; 

- (void)viewDidLoad { 

////////////////////////////////////////////////// 

//Web Service Call 

////////////////////////////////////////////////// 

    NSURL *url = [NSURL URLWithString:@"https://192.168.1.105/HelloService/Service.svc/username(user)/password(xxx)"];       

    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60.0]; 
    [NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]]; 

    [theRequest addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];  

    [theRequest setHTTPMethod:@"GET"];  
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

    if(theConnection) { 
     webData = [[NSMutableData data] retain]; 
    } 
    else { 
     NSLog(@"theConnection is NULL"); 
    } 

} 



-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    [webData setLength: 0]; 
} 
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    [webData appendData:data]; 
} 
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 

    NSLog(@"ERROR with theConnection:%@",[error description]); 
    if ([error code] == -1001){//isEqualToString:@"timed out"]) { 
     UIAlertView *alertView = [[[UIAlertView alloc] initWithTitle:@"Connection Error" message:@"Server Unresponsive" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease]; 
     [alertView show]; 

    }else{ 
     UIAlertView *alertView = [[[UIAlertView alloc] initWithTitle:@"Connection Error" message:@"Check your internet connection " delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease]; 
     [alertView show]; 
    } 


    [connection release]; 
    [webData release]; 
} 
-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"DONE. Received Bytes: %d", [webData length]); 

    /////////////////////// 
    //Process Your Data here: 






    /////////////////////// 

    [connection release]; 
    [webData release]; 

} 


- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 


- (void)dealloc { 

    [super dealloc]; 
}