2
votes
import UIKit
import Alamofire
import SwiftyJSON

class LoginViewController: UIViewController {


    @IBOutlet weak var urlTextFiled: UITextField!
    @IBOutlet weak var emailTextFiled: UITextField!
    @IBOutlet weak var passwordTextFiled: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

    }

        guard let email = emailTextFiled.text, !email.isEmpty else {
            return
        }
        guard let password = passwordTextFiled.text, !password.isEmpty else {
            return
        }
        let db = "mohanad"
        let url = "http://176.58.117.249/web/session/authenticate"

        let parameters: [String: Any] = [
        "db": db,
        "login": email,
        "password": password ,
        ]

        Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: nil)
        .validate(statusCode: 200..<600)
        .responseJSON { response in

            switch response.result
            {
            case .failure(let error):
                print(error)

            case .success(let value):

                print(value)
            }

        }


    }

}

prints the following error:

responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}))

2
{"jsonrpc":"2.0","method":"call","params":{"db":"mohanad","login":"[email protected]","password":"mohanad123"}} - Mohanad Hilles
your server sends me this response Bad Request. see my answer. - AshvinGudaliya

2 Answers

1
votes

Try this

Paramters:

let parameters: [String: Any] = [
        "jsonrpc":"2.0",
        "method":"call",
        "params": [
            "db": db,
            "login": "mohanad@amana‌​.ps",
            "password": "moh‌​anad123",
            ]
        ]

request. use a encoding: JSONEncoding.default, because you have pass Raw value.

Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: nil)
        .validate(statusCode: 200..<600)
        .responseJSON { response in

            switch response.result
            {
            case .failure(let error):
                if let data = response.data {
                    print("Print Server Error: " + String(data: data, encoding: String.Encoding.utf8)!)
                }
                print(error)

            case .success(let value):

                print(value)
            }

    }

your api give me this type of data in this

"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\n<title>400 Bad Request</title>\n<h1>Bad Request</h1>\n<p>Session expired (invalid CSRF token)</p>\n"
8
votes

Replace .responseJSON with .responseString so:

Instead of:

Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: nil).responseJSON
{ response in
      //....                
}

do:

Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: nil).responseString
{ response in
     //....       
}