swift语言实现异步网络post请求,用NSDictionary封装post表单。
class func post(urlString urlString: String?,postParams: NSDictionary!,completion: (data: NSString?) -> Void){
if urlString == nil {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print("urlString 为空")
completion(data: nil)
})
}
let url = NSURL(string: urlString!)//post的url地址
let request = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy, timeoutInterval: 10)
request.HTTPMethod = "POST"
parseParams(Params: postParams, completion: {(result) in
let postData: NSData = (result?.dataUsingEncoding(NSUTF8StringEncoding))!
request.HTTPBody = postData//post表单
})
let queue = NSOperationQueue()
NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler: {
(response,data,error) -> Void in
let httpResponse = response as? NSHTTPURLResponse
if httpResponse?.statusCode == 200{
let parseData = NSString(data: data!, encoding: NSUTF8StringEncoding)//self.parseJSONData(data)
dispatch_async(dispatch_get_main_queue(),{
() -> Void in
completion(data: parseData)
})
}else {
dispatch_async(dispatch_get_main_queue(), {
() -> Void in
print(error)
completion(data: nil)
})
}
})
}
当然在post之前还要将传过来的NSDictionary转化为post的固定格式
class func parseParams(Params Params: NSDictionary!,completion: (paramString: NSString?) -> Void){
var keyValueFormat: String?
let result = NSMutableString()
let keyEnum = Params.keyEnumerator()
while let key = keyEnum.nextObject() as? String{
keyValueFormat = String.init(format: "%@=%@&", arguments: [key,(Params.valueForKey(key)?.description)!])//post的键值对
result.appendString(keyValueFormat!)
}
completion(paramString: result)
}