好记性不如烂笔头(三)

SwiftHTTP发送Http请求

刚学 iOS,利用SwiftHTTP来发送Http请求,就遇到一个坑,还是得记一下,以便以后回顾及查找:

    func postWithSwiftHTTP() {
        let url = "http://ip:port/api"
        let params = ["param" : paramTextField.text!]
        do {
            let opt = try HTTP.POST(url, parameters: params)
            opt.start { response in
                if let error = response.error {
                    print("error : \(error.localizedDescription)")
                    return
                }
            }
        } catch let error {
            print("got an error creating the reqeust : \(error)")
        }
    }

坑在哪呢?
就在参数设置这里,如果直接将paramTextField.text设置给params的话,如下:

let params = ["param" : paramTextField.text]

则此时发送的请求,参数是不合法的(todo: 抓包看一下请求), response就会一直是Bad Request的400错误,在这里愣了好久,T_T

后来想一下,难道这个值必须是明确的值才可以?,于是利用 ! 将其变成一个明确的值尝试一下,突然就通了。。。,如下

let params = ["param" : paramTextField.text!]

或者先将值给取出来

let param = paramTextField.text ?? ""
let params = ["param" : param]

用NSURLSession发送请求

上面用的SwiftHTTP是第三方库,而NSURLSession是swift本身提供的api, 用法如下:

    func postWithURLSession() {
        let param = paramTextField.text ?? ""
        let request = NSMutableURLRequest(URL: NSURL(string: "http://ip:port/api")!)
        request.HTTPMethod = "POST"
        let postString = "param=\(param)"
        request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
        let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
            data, response, error in
            if error != nil {
                print("error=\(error)")
                return
            }

            print("response = \(response)")
            let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
            print("responseString = \(responseString!)")

        }
        task.resume()

    }

iOS9.0中使用模拟器来发送Http请求

必须在info.plist中添加以下参数:
1. App Transport Security Settings
类型是Dictonary
2. 在其Item下面添加一个Allow Arbitrary Load
值设置为YES

如果不进行此设置,访问http请求有可能会错误,原因在于iOS9中引入了新特性 App Transport Security, 要求App内部访问的网络必须使用Https协议。

你可能感兴趣的:(烂笔头系列,iOS学习笔记)