處理辦法:
在info.plist 參加key
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
上面給年夜家引見IOS中http 和https 協定的拜訪
比來做個項目,開端采取的是HTTP協定完成客戶端和辦事器真個交互,後來須要改成HTTPS協定。在修正的進程中發明了一些成績,處理計劃以下:
HTTP:
NSString *urlString =[NSString stringWithFormat:@"https://127.0.0.1/default.aspx?USER=%@",@"111"]; NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; [request setURL:[NSURL URLWithString:urlString]]; [request setHTTPMethod:@"GET"]; NSHTTPURLResponse* urlResponse = nil; NSError *error = [[NSError alloc] init]; NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error]; NSMutableString *result = [[NSMutableString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; NSLog(@"The result string is :%@",result);
HTTPS
事宜觸發
{ NSString *urlString =[NSString stringWithFormat:@"https://127.0.0.1/default.aspx?USER=%@",@"111"]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5]; //設置要求方法為get [request setHTTPMethod:@"GET"]; //添加用戶會話id [request addValue:@"text/html" forHTTPHeaderField:@"Content-Type"]; //銜接發送要求 finished = false; NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; //梗塞線程,期待停止 while(!finished) { [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; } } - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse*)response {} - (void)connectionDidFinishLoading:(NSURLConnection *)connection { //[_waitingDialog dismissWithClickedButtonIndex:0 animated:NO]; [connection release]; } -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { } - (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection *)connection{ return NO; } //上面兩段是重點,要辦事器端單項HTTPS 驗證,IOS 客戶端疏忽證書驗證。 - (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace { return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]; } - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { NSLog(@"didReceiveAuthenticationChallenge %@ %zd", [[challenge protectionSpace] authenticationMethod], (ssize_t) [challenge previousFailureCount]); if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]){ [[challenge sender] useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; [[challenge sender] continueWithoutCredentialForAuthenticationChallenge: challenge]; } } NSLog(@"get the whole response"); //[receivedData setLength:0]; } //處置數據 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { }
【iOS9蘋果將原http協定改成了https協定的辦法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!