广

IOS开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    iOS9苹果将原http协议改成了https协议的方法

    2018-04-04 08:34:40 次阅读 稿源:互联网
    广告

    解决方法:

    在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{ } 

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告