【问题标题】:Send post-request with string使用字符串发送后请求
【发布时间】:2014-08-27 19:59:24
【问题描述】:

我无法向接受字符串的服务器发送快速后请求。服务器不接受 JSON 数据。苹果库中有什么方法吗?我找不到。

或者你甚至可以帮助我告诉如何编写这样的方法?

let url = NSURL(string: "myUrl")
var session = NSURLSession.sharedSession()
let request = NSMutableURLRequest(URL: url)
    request.HTTPMethod = "POST"
var params = "login_act:'myUsername'&login_pwd:'myPassword'"

var err: NSError?
request.HTTPBody = NSJSONReadingOptions.
// The following method call does not accept the params variable type, although I need to send a String
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &err)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
    println("Response: \(response)")
    var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
    println("Body: \(strData)")

感谢任何帮助!!!

【问题讨论】:

    标签: ios xcode https swift


    【解决方案1】:

    如果服务器不接受 json,那么将 header Content-Type 设置为 application/json 的目的是什么?您有两种选择,要么将内容作为 json 发送,要么将 post 请求作为表单提交发送。我会告诉你两种可能的方法,

    第一个只是简单的将表单参数发布到url,它不接受json,而是接受url编码的表单参数。

    let url = NSURL(string: "myUrl")
    var session = NSURLSession.sharedSession()
    let request = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "POST"
    var params = "login_act=myUsername&login_pwd=myPassword"
    request.HTTPBody = params.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
    var err: NSError?
    
    request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    
    var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
        println("Response: \(response)")
        var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
        println("Body: \(strData)")
    })
    

    其他方法,如果你的服务器接受json参数,那么方法和你做的很相似。

    let url = NSURL(string: "myUrl")
    var session = NSURLSession.sharedSession()
    let request = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "POST"
    var params = ["login_act":"myUsername", "login_pwd":"myPassword"]
    
    var err: NSError?
    // The following method call does not accept the params variable type, although I need to send a String
    request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &err)
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")
    
    var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
        println("Response: \(response)")
        var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
        println("Body: \(strData)")
    })
    

    【讨论】:

    • 我需要使用您的第一个建议。但是这些参数不包含在您的请求中。我该怎么做?
    【解决方案2】:

    使用 Alamofire 与 Swift 进行 HTTP 网络可能会更好。

    https://github.com/Alamofire/Alamofire

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      相关资源
      最近更新 更多