美文网首页
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