测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布上次发布 | 2017年4月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 thienpham234 维护。
依赖项 | |
ReachabilitySwift | ~> 3 |
PKHUD | ~> 4.2 |
Alamofire | ~> 4.4 |
AlamofireNetworkActivityIndicator | ~> 2.1 |
SwiftyJSON | ~> 3.1 |
CryptoSwift | ~> 0.6 |
使用简单方式
import T_AlamofireCustom
ServerManager._makeGETrequest(baseURL: "https://example.com",
endpoint: "/get/lits",
params: nil) { (success, status,response, dict, array, string, error) in
// Handle API
}
在 TAlamofireCustom 中处理 Response
,涉及到在 Request
上链式添加响应处理程序。
ServerManager._makeGETrequest(baseURL: "https://example.com",
endpoint: "/get/lits",
params: nil) { (success, status,response, dict, array, string, error) in
// Handle API
print(success) // success == true => Response Success
print(status) // Reponse status code of a request. (Notice: status == -1 ==> No Connect Internet)
print(response) // Response Data JSON
print(dict) // Parsed json to (Dictionary) (If response json is Dictionary)
print(array) // Parsed json to (Array) (If response json is Array)
print(string) // Parsed json to (String) (If response json is String)
print(error) // error: NSError
}
public enum eHTTPMethod: String {
case GET
case POST
case PUT
case DELETE
}
public enum eContentTypeHTTPHeader: Int {
case JSON
case FormURLEncoded
}
let parameters: Parameter = ["foo": "bar"]
// All three of these calls are equivalent
ServerManager._makeGETrequest(baseURL: "https://httpbin.org",
endpoint: "/get",
params: parameters) { (success, status,response, dict, array, string, error) in
// Handle API
}
OR
// showHub: default is True
// showError: default is True
ServerManager._makeGETrequest(baseURL:"https://httpbin.org" ,
endpoint: "/get",
params: "paramters",
showError: false,
showHud: true) { (success, status,response, dict, array, string, error) in
//
}
// https://httpbin.org/get?foo=bar
//
ServerManager._makeGETrequest(baseURL: "",
endpoint: "",
params: nil,
username:"",
password: "",
accessToken: "",
showError: false,
showHud: false) { (success, status,response, dict, array, string, error) in
//
}
let body: Parameter = [
"foo": [1,2,3],
"bar": [
"baz": "qux"
]
]
ServerManager._makePOSTrequest(baseURL: "https://httpbin.org",
endpoint: "/post",
params: nil,
body: body) { (success, status,response, dict, array, string, error) in
//Handel response
})
// HTTP body: {"foo": [1, 2, 3], "bar": {"baz": "qux"}}
let body: Parameter = [
"foo": "bar",
"baz": ["a", 1],
"qux": [
"x": 1,
"y": 2,
"z": 3
]
]
ServerManager._makePOSTrequest(baseURL: "https://httpbin.org",
endpoint: "/post",
params: nil,
body: body,
username:nil,
password: nil,
accessToken: nil,
contentType: .FormURLEncoded,
showError: false,
showHud: false) { (success, status,response, dict, array, string, error) in
//Handel response
})
// HTTP body: foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3
let parameters: Parameter = [
"foo": [1,2,3],
"bar": [
"baz": "qux"
]
]
ServerManager._makePOSTrequest(baseURL: "https://httpbin.org",
endpoint: "/post",
params: nil,
body: body,
username:nil,
password: nil,
accessToken: nil,
contentType: .JSON,
showError: false,
showHud: false) { (success, status,response, dict, array, string, error) in
//Handel response
})
// HTTP body: {"foo": [1, 2, 3], "bar": {"baz": "qux"}}
if (ServerManager._noConnection() == true){
// connection to internet is unavailable
}else{
//connection to internet is available
}
随着iOS 9中应用传输安全(ATS)的引入,使用具有多个ServerTrustPolicy
对象的自定义ServerTrustPolicyManager
可能无效。如果您持续看到CFNetwork SSLHandshake failed (-9806)
错误,则可能遇到了这个问题。除非您在应用程序的plist中配置ATS设置以禁用足够的功能,否则Apple的ATS系统会覆盖整个挑战系统,因此无法评估服务器的信任。
如果您遇到这个问题(使用自签名证书的可能性较高),您可以通过在Info.plist
中添加以下内容来解决这个问题。
<dict>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
<!-- Optional: Specify minimum TLS version -->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
</dict>
</dict>
</dict>
</dict>
您是否需要将NSExceptionRequiresForwardSecrecy
设置为NO
取决于您的TLS连接是否使用允许的加密套件。在某些情况下,需要将其设置为NO
。为了允许SessionDelegate
接收挑战回调,NSExceptionAllowsInsecureHTTPLoads
必须设置为YES
。一旦开始调用挑战回调,ServerTrustPolicyManager
将接管服务器信任评估。如果您尝试连接到仅支持TLS版本低于1.2
的主机,您可能还需要指定NSTemporaryExceptionMinimumTLSVersion
。
建议在生产环境中始终使用有效的证书。
TAlamofireCustom中使用的库。
thienpham234, [email protected]
TAlamofireCustom基于MIT许可提供。有关更多信息,请参阅LICENSE文件。