美文网首页
Swift 网络请求,以form表单形式提交

Swift 网络请求,以form表单形式提交

作者: 花漾爱意 | 来源:发表于2020-12-15 09:11 被阅读0次

    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()
        }
    

    相关文章

      网友评论

          本文标题:Swift 网络请求,以form表单形式提交

          本文链接:https://www.haomeiwen.com/subject/mzcvgktx.html