如何使用swift发送Json作为参数在URL中我使用swift语言创建新的
。我在这里看到了一些快速解析Json的问题,但我的问题与其他问题有点不同。 当我写/ cmd =登录& params {'user':'username','password':'pass'}它返回正确的数据。如何快速解决此问题 我发送用户名和密码到url作为json,但 它检索错误,这意味着“无效格式” 请帮助我。 这里是我曾尝试:如何使用swift发送Json作为参数在URL中我使用swift语言创建新的
var url:NSURL = NSURL(string: "http://<host>?cmd=login")!
//var session = NSURLSession.sharedSession()
var responseError: NSError?
var request = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 5)
// var request:NSMutableURLRequest = NSMutableURLRequest(URL: url)
var response: NSURLResponse?
request.HTTPMethod = "POST"
let jsonString = "params={\"user\":\"username\",\"password\":\"pass\"}"
request.HTTPBody = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion:true)
request.setValue("application/json; charset=UTF-8", forHTTPHeaderField: "Content-Type")
// send the request
NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &responseError)
// look at the response
if let httpResponse = response as? NSHTTPURLResponse {
println("HTTP response: \(httpResponse.statusCode)")
} else {
println("No HTTP response")
}
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
data, response, error in
if error != nil {
println("error=\(error)")
return
}
println("****response= \(response)")
let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
println("**** response =\(responseString)")
var err: NSError?
var json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers , error: &err) as? NSDictionary
}
task.resume()
你JSON字符串是无效的,应该是这样的:
let jsonString = "{\"user\":\"username\",\"password\":\"pass\"}"
至于请求,我认为GET
它究竟需要:
var urlString = "http://<host>" // Only the host
let payload = "?cmd=login¶ms=" + jsonString // params goes here
urlString += payload
var url:NSURL = NSURL(string: urlString)!
// ...
request.HTTPMethod = "GET"
或者用'{}'包裹成'params'作为唯一键 – Wain
是的,这取决于服务器需要什么。 – skyline75489
如何解决NSURL和String类型的+ =运算符? – Vidul
我不认为你需要按照你的方式来编码你的JSON。以下应该工作。
let jsonString = "params={\"user\":\"username\",\"password\":\"pass\"}"
var url:NSURL = NSURL(string: "http://<host>?cmd=login&?\(jsonString)")!
//var session = NSURLSession.sharedSession()
var responseError: NSError?
var request = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 5)
// var request:NSMutableURLRequest = NSMutableURLRequest(URL: url)
var response: NSURLResponse?
request.HTTPMethod = "POST"
不起作用(( – Vidul
假设根据您的疑问,服务器要求的格式是这样的:
http://<host>?cmd=login¶ms=<JSON object>
您需要先URL-encode JSON对象其追加到查询字符串,以消除任何之前非法字符。
你可以做这样的事情:
let jsonString = "{\"user\":\"username\",\"password\":\"pass\"}"
let urlEncoadedJson = jsonString.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())
let url = NSURL(string:"http://<host>?cmd=login¶ms=\(urlEncoadedJson)")
假设URL是
https://example.com/example.php?Name=abc&data= { “类”: “625”, “主题”: “英语”}
斯威夫特4
let abc = "abc"
let class = "625"
let subject = "english"
let baseurl = "https://example.com/example.php?"
let myurlwithparams = "Name=\(abc)" + "&data=" +
"{\"class\":\"\(class)\",\"subject\":\"\(subject)\"}"
let encoded =
myurlwithparams.addingPercentEncoding(withAllowedCharacters:
.urlFragmentAllowed)
let encodedurl = URL(string: encoded!)
var request = URLRequest(url: encodedurl!)
request.httpMethod = "GET"
您是否需要以JSON形式发送?为什么不作为?user = username&?password = pass? 我会建议看看Alamofire的Swift HTTP请求。 https://github.com/Alamofire/Alamofire – Chackle
jsonString不是有效的json,它需要是'“{\”params \“:{\”user \“:\”username \“,\”password \ “:\”pass \“}}”''除非它不需要是 – sketchyTech
params = {'user':'username','password':'pass'}它在浏览器中运行良好 – Vidul