Swift 中的 HTTPS Post 2 - 使用 NSURLSession/NSMutableURLRequest
HTTPS Post in Swift 2 - Using NSURLSession/NSMutableURLRequest
使用swift 2、语言新手。我的目标是向 API 发送一个简单的 post 请求,然后解析响应。我还没有找到明确的方法来做到这一点,我所做的任何尝试都失败了。这是我拥有的:
func restURL() {
let xmlStr: String? = "<webservices><WebService type='test'><WSName>test</WSName><select>select * from receipts where id = '1234'</select></WebService></webservices>"
let session = NSURLSession.sharedSession()
let url = NSURL(string: "https://apiwebaddress.com/post" as String)!
let request = NSMutableURLRequest(URL: url)
let post:NSString = xmlStr!
let postData:NSData = post.dataUsingEncoding(NSUTF8StringEncoding)!
request.HTTPMethod = "POST"
request.HTTPBody = postData
request.setValue("0", forHTTPHeaderField: "Content-Length")
request.setValue("application/xml", forHTTPHeaderField: "Content-Type")
request.setValue("gzip,deflate", forHTTPHeaderField: "Accept-Encoding")
request.setValue("Keep-Alive", forHTTPHeaderField: "Connection")
我相信我设置正确,我想发送这个然后在回复正文中获取 xml 但我不确定从这里去哪里。我读过的所有内容都已弃用或令人困惑。有人可以用简单的术语解释如何实现我的目标吗?提前致谢
这不是您问题的直接解决方案,但有一个名为 Alamofire (link here) 的第三方框架,在我看来,它可以让像这样的事情变得更干净、更容易。
有一些示例可以说明如何向您like/similar执行请求。
这是我根据研究如何使用 NSURLSession 执行请求而制作的片段。我添加了一些注释以使代码更具可读性:)
func restURL() {
{
let xmlStr: String? = "<webservices><WebService type='test'><WSName>test</WSName><select>select * from receipts where id = '1234'</select></WebService></webservices>"
var request = NSMutableURLRequest(URL: NSURL(string: url))
var session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
let post:NSString = xmlStr!
let postData:NSData = post.dataUsingEncoding(NSUTF8StringEncoding)!
request.HTTPBody = postData
request.addValue("application/xml", forHTTPHeaderField: "Content-Type")
request.addValue("gzip,deflate", forHTTPHeaderField: "Accept-Encoding")
request.addValue("Keep-Alive", forHTTPHeaderField: "Connection")
var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
println("Response: \(response)")
var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Body: \(strData)")
/*Parse data here */
// Here an example how it can be done in case of json response:
var err: NSError?
var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as? NSDictionary
}) // var task
task.resume()
} // End restURL
使用swift 2、语言新手。我的目标是向 API 发送一个简单的 post 请求,然后解析响应。我还没有找到明确的方法来做到这一点,我所做的任何尝试都失败了。这是我拥有的:
func restURL() {
let xmlStr: String? = "<webservices><WebService type='test'><WSName>test</WSName><select>select * from receipts where id = '1234'</select></WebService></webservices>"
let session = NSURLSession.sharedSession()
let url = NSURL(string: "https://apiwebaddress.com/post" as String)!
let request = NSMutableURLRequest(URL: url)
let post:NSString = xmlStr!
let postData:NSData = post.dataUsingEncoding(NSUTF8StringEncoding)!
request.HTTPMethod = "POST"
request.HTTPBody = postData
request.setValue("0", forHTTPHeaderField: "Content-Length")
request.setValue("application/xml", forHTTPHeaderField: "Content-Type")
request.setValue("gzip,deflate", forHTTPHeaderField: "Accept-Encoding")
request.setValue("Keep-Alive", forHTTPHeaderField: "Connection")
我相信我设置正确,我想发送这个然后在回复正文中获取 xml 但我不确定从这里去哪里。我读过的所有内容都已弃用或令人困惑。有人可以用简单的术语解释如何实现我的目标吗?提前致谢
这不是您问题的直接解决方案,但有一个名为 Alamofire (link here) 的第三方框架,在我看来,它可以让像这样的事情变得更干净、更容易。
有一些示例可以说明如何向您like/similar执行请求。
这是我根据研究如何使用 NSURLSession 执行请求而制作的片段。我添加了一些注释以使代码更具可读性:)
func restURL() {
{
let xmlStr: String? = "<webservices><WebService type='test'><WSName>test</WSName><select>select * from receipts where id = '1234'</select></WebService></webservices>"
var request = NSMutableURLRequest(URL: NSURL(string: url))
var session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
let post:NSString = xmlStr!
let postData:NSData = post.dataUsingEncoding(NSUTF8StringEncoding)!
request.HTTPBody = postData
request.addValue("application/xml", forHTTPHeaderField: "Content-Type")
request.addValue("gzip,deflate", forHTTPHeaderField: "Accept-Encoding")
request.addValue("Keep-Alive", forHTTPHeaderField: "Connection")
var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
println("Response: \(response)")
var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Body: \(strData)")
/*Parse data here */
// Here an example how it can be done in case of json response:
var err: NSError?
var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as? NSDictionary
}) // var task
task.resume()
} // End restURL