Api swift中的POST请求

Api swift中的POST请求,api,swift,post,nsurlsession,mashape,Api,Swift,Post,Nsurlsession,Mashape,好吧,我到处找,找不到答案。因此,我只是尝试从iPhone应用程序向mashape api发出一个简单的POST请求。以下是我到目前为止的情况: var headers: NSDictionary = ["X-Mashape-Key": "Hm5NokCvUamshPFfnQCRJKne3UuCp1C******************", "Content-Type": "application/x-www-form-urlencoded", "Accept": "application/js

好吧,我到处找,找不到答案。因此,我只是尝试从iPhone应用程序向mashape api发出一个简单的POST请求。以下是我到目前为止的情况:

var headers: NSDictionary = ["X-Mashape-Key": "Hm5NokCvUamshPFfnQCRJKne3UuCp1C******************", "Content-Type": "application/x-www-form-urlencoded", "Accept": "application/json"]

var params = ["async": "0", "client_secret": "ceaf93f10f7330318ae*********************", "input": "<required>", "lang": "En", "memory_limit": "262144", "source": "From the web", "time_limit": "10"] as Dictionary

var url : NSURL = NSURL(string: "https://blah.mashape.com/location/")!

var request = NSMutableURLRequest(URL: url)
var session = NSURLSession.sharedSession()

var err: NSError?
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &err) as NSData!

if err != nil {
    println(err)
}

request.HTTPMethod = "POST"
request.allHTTPHeaderFields = headers

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

task.resume()
var headers:NSDictionary=[“X-Mashape-Key”:“Hm5NokCvUamshPFfnQCRJKne3UuCp1C*********”,“内容类型”:“应用程序/X-www-form-urlencoded”,“接受”:“应用程序/json”]
变量参数=[“异步”:“0”,“客户机机密”:“CEAF93F10F730318AE*******************”,“输入”:“,“语言”:“En”,“内存限制”:“262144”,“源”:“来自web”,“时间限制”:“10”]作为字典
变量url:NSURL=NSURL(字符串:https://blah.mashape.com/location/")!
var-request=NSMutableURLRequest(URL:URL)
var session=NSURLSession.sharedSession()
变量错误:n错误?
request.HTTPBody=NSJSONSerialization.dataWithJSONObject(参数,选项:nil,错误:&err)作为NSData!
如果出错!=零{
println(err)
}
request.HTTPMethod=“POST”
request.allHTTPHeaderFields=标题
var task=session.dataTaskWithRequest(请求,completionHandler:{data,response,error->Void in
println(“响应:\(响应)”)
var strData=NSString(数据:数据,编码:NSUTF8StringEncoding)
println(“正文:\(strData)”)
})
task.resume()
但当我得到回复时,标准数据说:

Body: Optional({"errors": {}, "code_id": "cc6581D", "message": "ArgumentMissingError: client_secret is needed!", "run_status": {"status": "AC", "time_limit": 5, "output_html": "a[0]&nbsp;=&nbsp;10<br>a[1]&nbsp;=&nbsp;11<br>a[2]&nbsp;=&nbsp;12<br>a[3]&nbsp;=&nbsp;13<br>a[4]&nbsp;=&nbsp;14<br>a[5]&nbsp;=&nbsp;15<br>a[6]&nbsp;=&nbsp;16<br>a[7]&nbsp;=&nbsp;17<br>a[8]&nbsp;=&nbsp;18<br>a[9]&nbsp;=&nbsp;19<br>", "memory_limit": 262144, "time_used": "0.1006", "signal": "OTHER", "status_detail": "N/A", "output": "a[0] = 10\na[1] = 11\na[2] = 12\na[3] = 13\na[4] = 14\na[5] = 15\na[6] = 16\na[7] = 17\na[8] = 18\na[9] = 19\n", "async": 0, "memory_used": "64"}, "compile_status": "OK", "web_link": "http://blah.com/cc6581D"})
Body:Optional({“errors”:{},“code\u id”:“cc6581D”,“message”:“argumentmissingeror:client\u secret is needed!”,“run\u status”:“AC”,“time\u limit”:5,“output\u html”:“a[0]=10
a[1]=11
a[2]=12
a[3]=13
a[4]=14
a[5]=15
a[6]=16
a[7]=17
a[8]=18
a[19],“使用的时间”:“0.1006”,“信号”:“其他”,“状态详情”:“N/A”,“输出”:“A[0]=10\na[1]=11\na[2]=12\na[3]=13\na[4]=14\na[5]=15\na[6]=16\na[7]=17\na[8]=18\na[9]=19\N”,“异步”:0,“使用的内存”:“64”;“编译状态”:“确定”,“web链接”:http://blah.com/cc6581D"})

它说需要客户端密码,但我将其包含在params字典中?如果有任何帮助,我们将不胜感激。

好的,如果有人有同样的问题,我将发布解决方案。正如@findall指出的,我认为正确的编码不是JSON,而应该是url编码。但在我将其更改为url编码后,它仍然是我没有工作,所以我打了一针,它完全起作用了!代码如下:

var headers: NSDictionary = ["X-Mashape-Key": "Hm5NokCvUamshPFfnQCRJKne3UuCp1Cq48FjsnMnQnEcHN0gk6", "Content-Type": "application/x-www-form-urlencoded", "Accept": "application/json"]

var params = ["async": "0", "client_secret": "ceaf93f10f7330**************************", "input": "<required>", "lang": "En", "memory_limit": "262144", "source": "Link", "time_limit": "10"] as Dictionary

var defaultHeaders = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders ?? [:]
defaultHeaders["X-Mashape-Key"] = "Hm5NokCvUamshPFfnQ********************************"
defaultHeaders["Content-Type"] = "application/x-www-form-urlencoded"
defaultHeaders["Accept"] = "application/json"

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.HTTPAdditionalHeaders = defaultHeaders

let manager = Alamofire.Manager(configuration: configuration)

var request = Alamofire.Manager(configuration: configuration).request(.POST, "https://blah.mashape.com/location/", parameters: params)
request.responseString({ (request, response, string, error) in

    println(string)
})
var headers:NSDictionary=[“X-Mashape-Key”:“Hm5NokCvUamshPFfnQCRJKne3UuCp1Cq48FjsnMnQnEcHN0gk6”,“内容类型”:“application/X-www-form-urlencoded”,“Accept”:“application/json”]
变量参数=[“异步”:“0”,“客户机机密”:“ceaf93f10f7330*******************”,“输入”:“lang”:“En”,“内存限制”:“262144”,“源”:“链接”,“时间限制”:“10”]作为字典
var defaultHeaders=Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders???[:]
defaultHeaders[“X-Mashape-Key”]=“Hm5NokCvUamshPFfnQ*****************************”
defaultHeaders[“内容类型”]=“应用程序/x-www-form-urlencoded”
defaultHeaders[“接受”]=“应用程序/json”
let configuration=NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.HTTPAdditionalHeaders=defaultHeaders
让manager=Alamofire.manager(配置:配置)
var request=Alamofire.Manager(配置:configuration.request(.POST)https://blah.mashape.com/location/,参数:params)
responseString({(请求、响应、字符串、错误)在
println(字符串)
})

谢谢@chris告诉我关于AlamoFire的事。

有一个很好的新的叫做AlamoFire的swift网络库,它让这些东西变得非常简单forward@chris嗯,有趣的是,我将不得不检查它。您确定该API的post数据格式是
json
?关于
x-www-form-urlencoded
?@findall wow-yo你是对的。它应该是url编码而不是JSON格式。哈哈哈,那个上面有一个大大的手掌。谢谢。