我已经尝试了许多不同的方法来重新创建这个curl请求,但是我疯了。如果有人可以帮助我,我将不胜感激。

curl -H "Content-Type: application/json" -X POST --data '[{"a": 4, "b": 5, "c": 6}]' \ -u username:password \ https://www.mywebsite.com

我最近的尝试是:
    let loginString = NSString(format: "%@:%@", username!, password!)
    let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!
    let base64LoginString = loginData.base64EncodedStringWithOptions(nil)

    var url: NSURL = NSURL(string: "www.mywebsite.com")!

    var request: NSMutableURLRequest = NSMutableURLRequest(URL: url)
    request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")
    request.addValue("text/plain; charset=UTF-8", forHTTPHeaderField: "Content-Type")
    request.HTTPMethod = "POST"

    let bodyData = JSON(data!).rawString(encoding: NSUTF8StringEncoding, options: NSJSONWritingOptions.allZeros)
    request.HTTPBody = bodyData?.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)

    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in
        if let tabBarVC : TabBarController = self.tabBarController as? TabBarController {
            println(NSString(data: data, encoding: NSUTF8StringEncoding))
        }
    }

在此示例中,数据是字典([String:String]),而JSON是SwiftyJSON形式。

上面的代码将NSData发送到服务器,该服务器已编码并且服务器不喜欢。请求正在通过,但服务器无法正确读取数据。我该怎么做才能完全复制上面的curl请求?我被卡住了!

更新以反映以下良好的响应。

我确实尝试对内容类型使用application / json,但这返回了消息:
{"status": "Internal error JSON uploads must be formatted as an array of objects", "code": 400, "version": "v1"}

如果我使用text / plain(如上),似乎得到了进步:
{"status": "Column a is missing", "code": 400, "version": "v1"}

我似乎无法弄清楚。

最佳答案

一些想法:

  • 如果没有其他要求,则该行显示:
    request.addValue("text/plain; charset=UTF-8", forHTTPHeaderField: "Content-Type")
    

    应该:
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    

    您的curl明确指出内容类型标头应该是JSON,因此我将其进行相应设置。
  • 另外,该行显示:
    request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Accept-encoding")
    

    这显然也不正确。我认为您的意思是Accept而不是Accept-encoding,再加上服务器无疑没有响应x-www-form-urlencoded响应。

    我只是删除该行。
  • 您的URL缺少方案(http://),但是我认为在编辑您的问题时该方案已被删除,因为我认为没有该方案将不起作用,但是您向我们保证服务器确实收到了请求。
  • 我建议您考虑使用Charles之类的工具。查看来自curl的请求,然后再次查看您的代码。比较和对比并确定它们之间的差异。使用此工具,您应该能够准确诊断正在发生的情况以及差异所在。
  • 您说:

    请求正在通过,但服务器无法正确读取数据。

    如果问题仍然存在,则应与我们分享您如何知道请求正在处理以及“无法正确读取数据”的含义。
  • 关于ios - 快速响应此curl请求是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29578923/

    10-17 02:17