如何使用Alamofire 4在HTTP正文中发送带有数据的POST请求?我在Swift 2.3上使用了自定义编码,效果很好。我转换了代码swift 3,并尝试对参数进行编码,但无法正常工作。此代码:
public struct MyCustomEncoding : ParameterEncoding { private let data: Data init(data: Data) { self.data = data } public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { var urlRequest = try urlRequest.asURLRequest() do { urlRequest.httpBody = data urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") } catch { throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error)) } return urlRequest }
和Alamofire请求:
let enco : ParameterEncoding = MyCustomEncoding(data: ajsonData) Alamofire.request(urlString, method: .post , parameters: [:], encoding: enco , headers: headers).validate() .responseJSON { response in switch response.result { case .success: print(response) break case .failure(let error): print(error) } }
您需要像下面一样迅速发送请求3
let urlString = "https://httpbin.org/get" Alamofire.request(urlString, method: .post, parameters: ["foo": "bar"],encoding: JSONEncoding.default, headers: nil).responseJSON { response in switch response.result { case .success: print(response) break case .failure(let error): print(error) } }
带Alamofire 5的Swift 5:
AF.request(URL.init(string: url)!, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in print(response.result) switch response.result { case .success(_): if let json = response.value { successHandler((json as! [String:AnyObject])) } break case .failure(let error): failureHandler([error as Error]) break } }