我有下面的swift代码,它成功地提交了一个POST
请求。
let request = NSMutableURLRequest(URL: NSURL(string: url)!)
let session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
request.HTTPBody = "foo=bar&baz=lee".dataUsingEncoding(NSUTF8StringEncoding)
let task = session.dataTaskWithRequest(request, completionHandler: completionHandler)
我想使用字典而不是使用查询参数之类的语法,但当我做以下操作时:
let request = NSMutableURLRequest(URL: NSURL(string: url)!)
let session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(["foo":"bar", "lee":"baz"], options: [])
let task = session.dataTaskWithRequest(request, completionHandler: completionHandler)
(like我在周围看到的),它似乎提交请求,就好像主体是空的一样。
我的主要问题是:这些语法有何不同,产生的请求又有何不同?
- 注意 *:来自JS,我正在javascript环境(jquery.com的控制台)中测试端点,如下所示,它工作正常:
$.ajax({
url: url,
method: 'POST',
data: {
foo: 'bar',
baz: 'lee'
}
});
2条答案
按热度按时间20jt8wwn1#
@mrkbxt说的是什么。这不是语法如何不同的问题,而是随请求发送的数据类型不同的问题。UTF8字符串编码文本是
NSMutableURLRequest
内容类型的默认值,这就是为什么您的第一个请求可以工作。要在正文中使用JSON,您必须将内容类型切换为使用JSON。将以下内容添加到请求对象中,使其接受JSON:
rta7y2nd2#
对于类型为“x-www-form-urlencoded”的内容类型,您可以执行以下操作。
这将获取您的字典,将其转换为符合您请求的content-Type的字符串(通过使用分隔符连接字典),然后使用utf8对其进行编码。