Swift網路訪問庫Alamofire訪問httpslocalhost伺服器
Alamofire提供了比IOS標準庫便捷的網路訪問介面,沿用了Objective-C的AFNetwork的各種優點,所以成為了我遷移到Swift平臺不二的選擇。
Alamofire文件地址
不過剛剛上手就碰到了很初級的問題:使用https連線本地的伺服器總是報錯。
- 為什麼一定要用把人逼瘋的https呢? *
2016年6月14日在WWDC 2016開發者大會上,蘋果宣佈了一個最後期限:2017年1月1日起,蘋果App Store中的所有App都必須啟用 App Transport Security(ATS)安全功能。
所以 現在開發一個商用的程式必須使用https來訪問後臺API啦
在多次碰壁無果後,只好把問題分解隔離,各個擊破。
- Alamofire的 https 連線問題。訪問個baidu.com試試?
- Alamofire 的 localhost 自定義證書的問題。
- ATS IOS系統網路安全配置。
經驗如下:
- Alamofire的 https 連線問題, 報錯 Error Domain=NSURLErrorDomain Code=-999 “cancelled”。問題主要是由於sessionManager的生命週期導致的。通過把sessionManager 設定為類成員,避免在response回撥時提前銷燬,解決了正常訪問baidu.com的問題。
import Foundation
import Alamofire
class NetworkManager {
var manager: Manager?
init() {
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
manager = Alamofire.Manager(configuration: configuration)
}
}
2.Alamofire 的 localhost 自定義證書的問題。
需要在serverTrustPolicies中加上域名,disableEvaluation選項。注意使用域名,不需要埠等其他引數。
class NetworkManager {
var manager: SessionManager?
init() {
let serverTrustPolicies: [String: ServerTrustPolicy] = [
"10.68.24.127" : .disableEvaluation
]
let configuration = URLSessionConfiguration.default
manager = Alamofire.SessionManager(
configuration: configuration,
serverTrustPolicyManager :ServerTrustPolicyManager(policies: serverTrustPolicies)
)
}
}
- 系統ATS安全。
該功能屬於IOS的新功能,需要配置info.plist檔案。增加域名對應的配置項。
<key>NSAppTransportSecurity</key><dict>
<key>NSExceptionDomains</key>
<dict>
<key>url.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
由於上面3種因素混合,導致了這個問題難以解決。
最後Alamofire的作者提供了一個很好的建議:
- 在ServiceTrustManger的陣列中設定斷點來判斷究竟是ATS系統阻攔了請求,還是Alamofire本身的問題。
相關文章
- Swift 訪問控制Swift
- Swift iOS : 訪問 https 伺服器SwiftiOSHTTP伺服器
- 網際網路訪問檢測伺服器伺服器
- 訪問web伺服器--網路實驗Web伺服器
- Swift 中的網路請求問題 OC(AFNetworking) && Swift(Alamofire)Swift
- Swift 中的訪問控制Swift
- 用訪問控制列表實現網路單向訪問(轉)
- ora-24247 :網路訪問被訪問控制列表(ACL)拒絕
- Swift的訪問控制講解Swift
- 外網訪問MySQL資料庫MySql資料庫
- swift 網路請求Alamofire的使用Swift
- nginx對訪問路徑進行限制【部分介面可以內外網訪問、剩餘介面只可以內網訪問】Nginx內網
- Swift4.0 訪問許可權Swift訪問許可權
- Swift3集合訪問Swift
- Oracle 訪問路徑Oracle
- 如何安全地訪問網際網路
- 訪問github出現無法訪問此網站Github網站
- iOS 12+ 中檢測網路訪問iOS
- Oracle外網訪問Oracle
- 訪問網際網路時發生了什麼?
- tomcat伺服器訪問網址組成Tomcat伺服器
- `cloudflare`優選`ip`訪問內網伺服器Cloud內網伺服器
- JDBC資料庫訪問JDBC資料庫
- 安卓圖片顯示與網路訪問安卓
- [Flutter必備]-Flutter中的網路訪問Flutter
- 【計算機網路】介質訪問控制計算機網路
- Android使用http協議訪問網路AndroidHTTP協議
- OpenStack外部網路不能訪問內部VM
- Docker配置代理訪問網路ubuntu24.04DockerUbuntu
- jboss訪問資料庫的問題資料庫
- SQL Server跨庫跨伺服器訪問實現SQLServer伺服器
- derby 資料庫 伺服器模式 無法訪問資料庫伺服器模式
- 本地網站外網訪問網站
- 外網訪問本地sqlserverSQLServer
- Swift 新特性 – 訪問控制(Access Control)Swift
- 訪問統計(排除爬蟲訪問)爬蟲
- 如何讓NAS可以透過網際網路訪問?
- 從網際網路遠端訪問樹莓派樹莓派