Search code examples
iosswiftxcodeswift4alamofire

Convert httpBody for x-www-urlencoded


I'm doing a POST call to server but Alamofire always send the body as a JSON and not as a Form URL Encoded, I do know that in oder to encode the body I have to insert data(using: .utf8, allowLossyConversion: false), but I don't know where. How can I fix my code?

This is my actual code:

func asURLRequest() throws -> URLRequest {
    let url = try DBank.StagingServer.baseUrl.asURL()

    var urlRequest = URLRequest(url: url.appendingPathComponent(path))

    // HTTP Method
    urlRequest.httpMethod = method.rawValue

    // Common Headers
    headers.forEach { (field, value) in
        urlRequest.setValue(value, forHTTPHeaderField: field)
    }

    // Parameters
    if let parameters = parameters {
        do {
            urlRequest.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: [])
        } catch {
            throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error))
        }
    }

Solution

  • I'm guessing you have response handler like below:

    Alamofire.request(url, method: .post, parameters: params, encoding: URLEncoding(destination: .queryString), headers: headers)
            .validate(statusCode: 200..<300)
            .responseString { response in
    
            //response.result.value will contain http response from your post call
    
    }
    

    With the result from this response you would set:

    UserDefaults.standard.set("<result>", forKey: "<token>")