AFN框架 之同時相容Http和Https通訊配置
目前很多APP都要求支援Https通訊,現在大多APP都是AFN框架之上實現的網路通訊層。以下討論了一下,AFN 框架之下,如何實現Http 和 Https相容(都支援)。(這個知識點雖然不難,但是網上很少有一試就能成功的帖子)
現在網上有很多“iOS9與XCode7中不能使用http連線的解決辦法”的貼子, 做法如下:
- 在專案左側找到Info.plist檔案,可以通過Filter來搜尋
- 在右側點選Add Row新增NSAppTransportSecurity,型別為Dictionary,然後再新增子專案NSAllowsArbitraryLoads類行為 Boolean值為YES
按照以上的操作,的確實現了http的支援。但是如果是通過第三方機構生成SSL數字證書比如https://www.wosign.com/;要實現http,https在AFN構架下同時相容還不行。(網上有一些通過生成證書,放在App裡,實現https的通訊,個人不建議使用此用方案,因為AFN的官網上,指出了修改info.plist檔案來實現https通訊。個人按照生成證書,除錯AFN框架下的Https通訊,並沒有成功)
建議直接用文字工作,開啟Info.plist這個xml檔案。直接配置如下圖資訊:
解釋一下:
1> IOS9下,對http通訊支援需要新增:
<key>NSAllowsArbitraryLoads</key>
<true/>
2> 如果域名是www.baidu.com的介面,在AFN框架下,要支援https訪問,需要新增:
<key>NSExceptionDomains</key>
<dict>
<key>www.baidu.com</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow HTTP requests-->
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--Include to specify minimum TLS version-->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
</dict>
</dict>
如果Https通訊中,SSL數字證書是自己生成的AFN示例程式碼如下
-(void)httpsForPrivateCer {
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
// 是否允許,NO-- 不允許無效的證書
[securityPolicy setAllowInvalidCertificates:YES];
[securityPolicy setValidatesDomainName:NO];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer.timeoutInterval = 20;
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.securityPolicy = securityPolicy;
[manager GET:URL parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject){
NSString *result = [[ NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"%@",result);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error come here");
}];
}
如果是通過第三方機構生成SSL數字證書比如
-(void)httpsForPublicCer {
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
// 是否允許,NO-- 不允許無效的證書
[securityPolicy setAllowInvalidCertificates:YES];
[securityPolicy setValidatesDomainName:NO];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer.timeoutInterval = 20;
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.securityPolicy = securityPolicy;
[manager POST:@"https://www.baidu.com/home/subscribe/data/manlotteryuserdata?indextype=manht&_req_seqid=0x933251bb0002c2f5&asyn=1&t=1458805039282&sid=18880_18285_1426_17943_18205_17000_15718_12187" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject){
NSString *result =[[ NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"%@",result);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error come here");
}];
}
相關文章
- Nginx配置域名同時支援 https 和 http 訪問NginxHTTP
- 應用同時支援HTTP和HTTPSHTTP
- HTTP 和 HTTPS 的異同HTTP
- springboot部署到阿里雲,配置https,springboot專案同時支援http和https請求,阿里雲配置httpsSpring Boot阿里HTTP
- Tcp, WebSocket 和 http 之間的通訊TCPWebHTTP
- HTTP協議的通訊框架HTTP協議框架
- WCF 客戶端 BasicHttpBinding 相容 HTTPS 和 HTTP客戶端HTTP
- AFN框架使用整理框架
- haproxy 配置https 同時技持443 80埠HTTP
- HTTP協議和HTTPS協議的異同點?HTTP協議
- 《圖解HTTP》讀書筆記7之HTTPS的安全通訊機制圖解HTTP筆記
- nginx的https和http共存反向代理配置NginxHTTP
- HTTP通訊HTTP
- HTTP 和 HTTPSHTTP
- HTTPS和HTTPHTTP
- HTTP和HTTPSHTTP
- 即時通訊框架T-io之WebSocket協議再之HelloWorld框架Web協議
- 什麼時候採用socket通訊,什麼時候採用http通訊HTTP
- Nginx配置正向代理支援HTTP和HTTPS轉發NginxHTTP
- iOS:即時通訊之iOS
- (十八)深入淺出TCPIP之HTTP和HTTPSTCPHTTP
- HTTP vs HTTPS: 網路通訊的加密之爭!你真的知道它們的區別嗎?HTTP加密
- Apache之Rewrite和RewriteRule規則梳理以及http強轉https的配置總結ApacheHTTP
- Nginx如何配置Http、Https、WS、WSS?NginxHTTP
- 阿里雲配置http轉https阿里HTTP
- HTTP通訊協議HTTP協議
- [深入17] HTTP 和 HTTPSHTTP
- HTTP和HTTPS協議HTTP協議
- HTTP和HTTPS詳解HTTP
- HTTP和HTTPS詳解。HTTP
- 簡述HTTP和HTTPS協議的不同之處HTTP協議
- https的通訊過程HTTP
- spring-boot 同時配置Oracle和MySQLSpringbootOracleMySql
- 全面瞭解HTTP和HTTPSHTTP
- http和https的區別?HTTP
- HTTPS和HTTP的區別HTTP
- HTTPS 和 HTTP 的區別HTTP
- HTTPS 和HTTP的介紹HTTP