提出请求IOS

时间:2015-05-09 15:27:31

标签: ios swift

我尝试通过API调用更新数据库中的对象。我用PUT请求执行此操作。邮政请求已经完成,工作正常。我以为这只是复制粘贴......

API部分工作正常,因为如果我执行以下curl命令而不是更新数据库中我想要的行

$ curl -H 'Accept: application/json' -i -X PUT -d 'UserLogin=Ub0D&EndDate=2014-01-17 00:00:00.0000000&Sport=Fietsen&Distance=1000&Duration=10&Achieved=true&DateCreated=2015-05-09 12:01:00.000000' http://localhost:8089/api/goal/ub0d -k -u ub0d:test123

但是现在swift中的部分给了我一个错误的请求错误(400)...... 这是我的代码

    var url : NSURL
    url = NSURL(string: _apiUrl + connectToApi(apiCall) + String("\(AccountRepository.Instance.getCurrentUserName())"))!

    let request = NSMutableURLRequest(URL: url)

    if postString != nil {

        let postData : NSData = ("UserLogin=Ub0D&EndDate=2014-01-1700:00:00.0000000&Sport=Fietsen&Distance=1000&Duration=10&Achieved=true&DateCreated=2014-01-1700:00:00.0000000").dataUsingEncoding(NSUTF8StringEncoding)!
        // create the request
        request.HTTPMethod = "PUT"
        request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")
        request.setValue("application/json", forHTTPHeaderField: "Content-type")
        request.setValue("application/json", forHTTPHeaderField: "Accept")
        request.HTTPBody = postData
    }
    var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: true)!

我真的坚持了下来:(

1 个答案:

答案 0 :(得分:0)

您请求不能同时拥有两种不同的内容类型:

request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")
request.setValue("application/json", forHTTPHeaderField: "Content-type")

您发送的数据显然不是JSON,所以我想您只想要

request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")

并删除"application/json"行。

您的日期格式也有差异:

<强> CURL

EndDate=2014-01-17 00:00:00.0000000

<强>夫特

EndDate=2014-01-1700:00:00.0000000

请注意日期和时间之间缺少的空格,可能应该是URL编码(+):

EndDate=2014-01-17+00:00:00.0000000

通常,大多数REST API会在响应正文中发送错误消息,因此记录失败请求的响应总是很好。