Swift 网络请求,以form表单形式提交
func postRequestSession(urlStr:String,paramers:NSDictionary?,Success:@escaping(_response:Any) ->Void,Fail:@escaping(_error:NSError) ->Void) ->Void{
let urlString:String = ServerUrl + urlStr // 请求地址
let requestUrl =URL.init(string:urlString)
var urlRequest =URLRequest.init(url: requestUrl!)
urlRequest.httpMethod = "POST"
let configuration:URLSessionConfiguration = URLSessionConfiguration.default
let manager = URLSession(configuration: configuration)
// 设置表单分隔符
let boundary = "Boundary-\(UUID().uuidString)"
urlRequest.setValue("multipart/form-data; boundary=\(boundary)",
forHTTPHeaderField:"Content-Type")
var bodyData = Data()
for(key, value) in paramers! {
// 数据之前要用 --分隔线 来隔开 ,否则后台会解析失败
bodyData.append("--\(boundary)\r\n".data(using:String.Encoding.utf8)!)
bodyData.append("--\(boundary)\r\n".data(using:String.Encoding.utf8)!)
bodyData.append("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n".data(using: String.Encoding.utf8)!)
bodyData.append("\(value)\r\n".data(using:String.Encoding.utf8)!)
}
// --分隔线-- 为整个表单的结束符
bodyData.append("--\(boundary)--\r\n".data(using:String.Encoding.utf8)!)
urlRequest.httpBody= bodyData
LRLog(message:"Request URL \(_URLStr) paramers:\(paramers!))")
let task = manager.dataTask(with: urlRequest){(data,response,error)in
if((error) ==nil){
if((data) ==nil){
return;
}
let httpResponse:HTTPURLResponse = response as! HTTPURLResponse
let statusCode = httpResponse.statusCode
if statusCode == 200{
guard let json = try?JSONSerialization.jsonObject(with: data!, options: .mutableContainers)else{
LRLog(message: data!)
return;
}
LRLog(message:json)
Success(json)
}else{
let errorLocal:NSError = NSError.init(domain:"请求失败", code: statusCode, userInfo: ["error":"请求失败"])
LRLog(message: errorLocal)
Fail(errorLocal)
}
}else{
LRLog(message: error?.localizedDescription)
Fail(error!asNSError)
}
}
task.resume()
}
网友评论