如何在没有“键值”对格式的情况下快速发送 json 对象
Posted
技术标签:
【中文标题】如何在没有“键值”对格式的情况下快速发送 json 对象【英文标题】:How to send json object in swift without "key - value" pair format 【发布时间】:2015-03-04 03:51:34 【问题描述】:嘿,所以我必须向 Django 服务器发送一个令牌字符串,它只接受一个字符串。我正在尝试使用 alamo fire 来执行此操作,但是我无法发送键值对来解决此问题。是否有替代解决方案。我是新的 ios 开发人员,这是我的第一个项目,也是社区的新手。谢谢。
【问题讨论】:
您能详细说明您需要发送到 Django-server 的内容吗?从它的声音来看,您尝试发送的并不是真正的 json,除非它是 url 编码或类似的东西...... 我需要向服务器发送一个令牌,例如“189E23FL2”。 【参考方案1】:将您的字典转换为 JSON 字符串并以这种方式发送:
func jsonStringify(data: AnyObject) -> NSData?
var error: NSError?
if let json = NSJSONSerialization.dataWithJSONObject(
data,
options: NSJSONWritingOptions(0),
error: &error
)
return json
else
return nil
【讨论】:
【参考方案2】:根据如何您需要发送令牌(POST vs GET vs HTTP Body vs Query String)...您可能需要更改以下内容。但它应该让你开始使用NSURLSession
。这会将令牌 189E23FL2
发送到服务器,并使用 POST 作为 HTTP 正文参数。
let url = NSURL(string: "http://some-server/endpoint")
var request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
request.HTTPBody = "189E23FL2".dataUsingEncoding(NSUTF8StringEncoding)
// if you need a csrf token, add something like this as well:
// request.addValue("the-csrf-token", forHTTPHeaderField: "X-CSRFToken")
var sessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
var session = NSURLSession(configuration: sessionConfiguration)
var task = session.dataTaskWithRequest(request, completionHandler: (data : NSData!, response : NSURLResponse!, error : NSError!) -> Void in
if (error == nil)
println("Done!")
else
println("Errorororororor")
)
// start the task
task.resume()
【讨论】:
执行此操作时,我从服务器收到以下消息:“详细信息”:“CSRF 失败:CSRF 令牌丢失或不正确。”使用实际服务器网站上的字段以及 Postman,如果我以以下格式发送令牌 - >“令牌”,它会成功将我注销。我不知道为什么它不接受你写的东西,这对我来说似乎是最合乎逻辑的。 CSRF 错误与跨站点请求伪造有关。由于直接使用该网站,它在同一 origin 上,它不会抱怨。但在 iOS 应用程序中,您还必须发送 CSRF 令牌。类似于:request.addValue("the-csrf-token", forHTTPHeaderField: "X-CSRFToken")以上是关于如何在没有“键值”对格式的情况下快速发送 json 对象的主要内容,如果未能解决你的问题,请参考以下文章
如何在不干扰 iOS 中键值对序列的情况下读写 json 文件?
如何在JSON格式的android动态键值对中动态获取输入数据