TAlamofireCustom 0.1.3

TAlamofireCustom 0.1.3

测试已测试
语言语言 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
 

  • thienpham234

需求

  • iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+
  • Xcode 8.1+
  • Swift 3.0+

用法

发送请求

使用简单方式

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 
 }

HTTP 方法

public enum eHTTPMethod: String {
    case GET
    case POST
    case PUT
    case DELETE
}

JSON 编码

public enum eContentTypeHTTPHeader: Int {
    case JSON
    case FormURLEncoded
}

带有 URL 编码参数的 GET 请求

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

使用 AccessToken 或 Username 与 Password 进行 GET 请求

// 
 ServerManager._makeGETrequest(baseURL: "",
                              endpoint: "",
                                params: nil,
                              username:"",
                              password: "",
                           accessToken: "",
                             showError: false,
                               showHud: false) { (success, status,response, dict, array, string, error) in
                                        //
        }

包含体内容的简单 POST 请求

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"}}

使用 eContentTypeHTTPHeader == .FormURLEncoded 参数的 POST 请求

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

使用 eContentTypeHTTPHeader == .JSON 参数的 POST 请求

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文件。