我是Swift3新手,在获取Json返回然后发送请求时遇到了问题。我试图向服务器发送一个带有参数username和password的post请求,并使用带有信息的Json获得响应,但我还无法获得要返回的数据。
输出:
错误:NSURLErrorDomain:-1003状态代码:200,标头连接=关闭;“Content-type”=“Application/JSON”;“transfer-encoding”=标识
Android上的请求如下所示:
"{\n" +
" \"jsonrpc\": \"2.0\",\n" +
" \"id\": \"1\",\n" +
" \"method\": \"call\",\n" +
" \"params\": [\n" +
" \"" + LOGIN_TOKEN + "\",\n" +
" \"session\",\n" +
" \"login\",\n" +
" {\n" +
" \"username\": \"" + userName + "\",\n" +
" \"password\": \"" + password + "\"\n" +
" }\n" +
" ]\n" +
"}";
这是我应该发送的请求:
"{ \"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"call\", \"params\": [ \"00000000000000000000000000000000\", \"session\", \"login\", { \"username\": \"root\", \"password\": \"admin01\" } ] }"
这是我的代码:
override func viewDidLoad() {
var userName = "root"
var password = "admin01"
//var LOGIN_TOKEN = 0000000000000000
let jsonObject: [String: Any] =
["jsonrpc" : 2.0,
"id": 1,
"method": "call",
"params": [ "00000000000000",
"session",
"login",
[ "username": userName,
"password": password]],
]
do {
let jsonData = try JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted)
// here "jsonData" is the dictionary encoded in JSON data
let decoded = try JSONSerialization.jsonObject(with: jsonData, options: [])
// here "decoded" is of type `Any`, decoded from JSON data
// you can now cast it with the right type
if let dictFromJSON = decoded as? [String:String] {
// use dictFromJSON
}
} catch {
print(error.localizedDescription)
}
Alamofire.request("http://192.168.1.1/ubus", method: .post, parameters: jsonObject, encoding: JSONEncoding.default)
.responseJSON { response in
print(response)
//to get status code
if let status = response.response?.statusCode {
switch(status){
case 201:
print("example success")
default:
print("error with response status: \(status)")
}
}
//to get JSON return value
if let result = response.result.value {
let JSON = result as! NSDictionary
print(JSON)
}
}
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
您的JSON对象似乎无效
有非常有用的JSON验证器是免费的。首先想到的是http://jsonlint.com
我认为,根据您发布的代码,您希望您的jsonObject看起来像这样,这是一个有效的JSON:
[
{
"jsonrpc": 2.0,
"id": 1,
"method": "call",
"params": ["00000000000000", "session", "login"],
"username": username,
"password": password
}
]
我假设username
和password
变量是您已经分配的字符串?