我正在尝试从URL获取一些数据,这需要我发布一个JSON请求。它的工作原理是我得到了一些数据;只是没有我预期的数据。然后我用jsontest.com来测试我的代码:
let url = NSURL(string: "http://echo.jsontest.com/")
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
do {
let params = ["echo": "abc"] as Dictionary<String, String>
//... Just make sure that 'params' is a valid JSON object
assert(NSJSONSerialization.isValidJSONObject(params))
request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions.PrettyPrinted)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
} catch {
print("Error")
}
let session = NSURLSession.sharedSession()
dataTask = session.dataTaskWithRequest(request, completionHandler: {
(data: NSData?, response: NSURLResponse?, error: NSError?) in
if let httpResponse = response as? NSHTTPURLResponse where httpResponse.statusCode == 200,
let data = data {
let encodedData = NSString(data:data, encoding:NSUTF8StringEncoding)
print("encodedData = \(encodedData!)")
} else {
print("Error")
}
})
dataTask?.resume()
当我运行它时,我看到jsontest.com的以下输出:
encodedData = {"": ""}
我期待的地方
encodedData = {"echo": "abc"}
那么,我是否不能正确理解这是jsontest.com是如何工作的,还是我做错了什么? (显然,我在使用其他JSON服务时遇到了类似的问题。)任何评论都表示赞赏。
答案 0 :(得分:1)
echo.jsontest.com
不适用于请求正文,但有请求网址,请参阅www.jsontest.com/#echo了解详情。
答案 1 :(得分:0)
结果@Eric D是对的。我发现另一个网站来测试我的JSON帖子,那个工作正常。所以代码基本上都是正确的。 我做了以下更改:
let url = NSURL(string: "http://gurujsonrpc.appspot.com/guru")
let params = [ "method" : "guru.test", "params" : [ "GB" ], "id" : 123 ] as Dictionary<String, AnyObject>
然后我得到以下回复:
{"jsonrpc":"2.0","id":123,"result":"Hello GB!"}
这正是预期的结果。 谢谢!
答案 2 :(得分:0)
正确的网址是http://validate.jsontest.com
另外,我认为您没有正确构建POST请求正文。见How are parameters sent in an HTTP POST request?