ishkawa/APIKit

i want use application/x-www-form-urlencoded body Parameters, but it doesn`t work

Closed this issue · 4 comments


func send() {
    let request = DMLoginOutRequest(type: "login", userName: "15311444509", psw: "5888913")
    Session.send(request) { (sesult) in
        print(sesult)
    }
}

struct DMLoginOutRequest: Request {
    
    let type: String
    let userName: String
    let psw: String
    
    typealias Response = UserInfo
    
    var method: HTTPMethod {
        return .post
    }
    var path: String {
        return "/v2/auth/login"
    }
    
    func response(from object: Any, urlResponse: HTTPURLResponse) throws -> UserInfo {
        return try UserInfo(object: object)
    }
    
    var parameters: Any? {
        return [
            "password" : psw,
            "username" : userName]
    }
 
}

extension DMLoginOutRequest {
    var headerFields: [String : String] {
        return [
            "Content-Type" : "application/x-www-form-urlencoded; charset=utf-8",
            "Accept-Language" : "zh-Hans-CN;q=1.0",
            "Accept-Encoding" : "gzip;q=1.0, compress;q=0.5"
        ]
    }

    var bodyParameters: BodyParameters {
        return FormURLEncodedBodyParameters(formObject:  parameters as! [String : Any])
    }
}

extension DMLoginOutRequest {
    var baseURL: URL {
        return URL(string: "http://api.52toys.com")!
    }
}
POST /v2/auth/login HTTP/1.1
Host: api.52toys.com
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Connection: keep-alive
Accept: application/json
User-Agent: DM78/1.0 CFNetwork/758.5.3 Darwin/15.6.0
Accept-Language: zh-Hans-CN;q=1.0
Accept-Encoding: gzip;q=1.0, compress;q=0.5
Content-Length: 37

password=5888913&username=15311444509
public extension Request {
    public var parameters: Any? {
        return nil
    }

    public var queryParameters: [String: Any]? {
        guard let parameters = parameters as? [String: Any], method.prefersQueryParameters else {
            return nil
        }

        return parameters
    }

    public var bodyParameters: BodyParameters? {
        guard let parameters = parameters, !method.prefersQueryParameters else {
            return nil
        }
        return FormURLEncodedBodyParameters(formObject: parameters as! [String : Any])
//        return JSONBodyParameters(JSONObject: parameters)
    }

    public var headerFields: [String: String] {
        return [:]
    }

    public var dataParser: DataParser {
        return JSONDataParser(readingOptions: [])
    }

    public func intercept(urlRequest: URLRequest) throws -> URLRequest {
        return urlRequest
    }

Could you explain how it doesn't work?
HTTP request which you paste looks correct.

Just closed this issue now. Feel free to reopen this if anyone still encounters the same issue!