【问题标题】:How to send json object in swift without "key - value" pair format如何在没有“键值”对格式的情况下快速发送 json 对象
【发布时间】:2015-03-04 03:51:34
【问题描述】:

嘿,所以我必须向 Django 服务器发送一个令牌字符串,它只接受一个字符串。我正在尝试使用 alamo fire 来执行此操作,但是我无法发送键值对来解决此问题。是否有替代解决方案。我是新的 IOS 开发人员,这是我的第一个项目,也是社区的新手。谢谢。

【问题讨论】:

  • 您能详细说明您需要发送到 Django-server 的内容吗?从它的声音来看,您尝试发送的并不是真正的 json,除非它是 url 编码或类似的东西......
  • 我需要向服务器发送一个令牌,例如“189E23FL2”。

标签: ios iphone json swift alamofire


【解决方案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")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    相关资源
    最近更新 更多