封装了个HttpManager,通过AFNetworking处理http请求,AFNetworking 3.0已经废弃POST和GET方法,因为SwiftyJSON可以直接将NSData作为参数,没有返回没有转换成String,String只用于debug输出,可注释掉,减少性能浪费。 HttpManager.swift:
import AFNetworking
class HttpManager {
let manager = AFHTTPSessionManager()
private static let httpManager: HttpManager = HttpManager()
static var sharedInstance:HttpManager {
return httpManager
}
private init() {
manager.responseSerializer = AFHTTPResponseSerializer()
manager.responseSerializer.acceptableContentTypes?.insert("text/html")
manager.requestSerializer.timeoutInterval = 10
}
/// Http Get方法,不带参数
/// \- parameter url: 请求的URL
/// \- parameter success: 成功后回调的闭包
/// \- parameter encoding: 编码,默认utf-8
func get(url: String,encoding:UInt = NSUTF8StringEncoding,success:((NSData) -> Void)?, failure: ((NSError) -> Void)?) {
return get(url, encoding: encoding, params: nil, success: success, failure: failure)
}
/// Http Get方法
/// \- parameter url: 请求的URL
/// \- parameter success: 成功后回调的闭包
/// \- parameter encoding: 编码,默认utf-8
/// \- parameter params: 参数,拼到url后缀里
func get(url: String,encoding:UInt = NSUTF8StringEncoding,params: \[String: AnyObject\]?,success:((NSData) -> Void)?, failure: ((NSError) -> Void)?) {
return request(url, method: "GET", encoding: encoding, params: params, success: success, failure: failure)
}
/// Http Post方法
/// \- parameter url: 请求的URL
/// \- parameter success: 成功后回调的闭包
/// \- parameter encoding: 编码,默认utf-8
/// \- parameter params: Post 参数
func post(url: String,encoding:UInt = NSUTF8StringEncoding,params: \[String: AnyObject\]?, success:((NSData) -> Void)?, failure: ((NSError) -> Void)?) {
return request(url, method: "POST", encoding: encoding, params: params, success: success, failure: failure)
}
///发送请求
/// \- parameter url: 请求URL
/// \- parameter method: 请求方法
/// \- parameter encoding: 编码,默认utf-8
/// \- parameter params:参数,如果是get,会添加到url后缀
/// \- parameter success: 成功回调闭包
/// \- parameter failure: 失败回调
func request(url: String, method: String = "GET",encoding:UInt = NSUTF8StringEncoding,params: \[String: AnyObject\]?, success:((NSData) -> Void)?, failure: ((NSError) -> Void)?) {
let paramStr = NSMutableString()
for (key,value) in params! {
paramStr.appendString("\\(key)=\\(value)&")
}
var requestUrl = url;
if(method == "GET") {
requestUrl = "\\(url)?\\(paramStr)"
}
let urlRequest=NSMutableURLRequest(URL: NSURL(string: requestUrl)!)
urlRequest.HTTPMethod = method
urlRequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")
if method == "POST" {
let bodyData = paramStr.stringByAddingPercentEscapesUsingEncoding(encoding)?.dataUsingEncoding(encoding)
urlRequest.HTTPBody = bodyData
}
let task = manager.dataTaskWithRequest(urlRequest) { (response, responseObj, error) -> Void in
if (error != nil) {
failure!(error!)
return
}
let responseData = responseObj as! NSData
let responseStr = NSString(data: responseData, encoding: encoding)
PLog.v(responseStr!)
success!(responseData)
}
task.resume()
}