swift HTTP通信

本文介绍了在Swift中进行HTTP通信的多种方法,包括加载网络数据的步骤,如通过`NSData`获取URL内容、使用`NSURLConnection`发送同步和异步请求。示例代码展示了如何获取百度首页的HTML内容,以及处理GET和POST请求的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一  加载网络数据 

(1)

        var str = NSString(contentsOfURL: NSURL(string: "http://www.baidu.com")!, encoding: NSUTF8StringEncoding, error: nil)

        println(str)

输出 百度首页的html代码 字符串格式 

(2)

var data = NSData(contentsOfURL: NSURL(string: "http://www.baidu.com")!)

        println(data)

输出 百度首页的二进制编码 

(3)

var data = NSData(contentsOfURL: NSURL(string: "http://www.baidu.com")!)

        println(NSString(data: data!, encoding: NSUTF8StringEncoding))

输出html代码 

(4)

        var resp:NSURLResponse?

        var error:NSError?

        var data2 = NSURLConnection.sendSynchronousRequest(NSURLRequest(URL: NSURL(string: "http://www.baidu.com")!), returningResponse: &resp, error: &error)

        if let d = data2{

            println(NSString(data: d, encoding: NSUTF8StringEncoding))

        }

        

        if let r = resp{

            println(r)

        }

        // 输出请求的头部信息 

<NSHTTPURLResponse: 0x7fce606c8520> { URL: http://www.baidu.com/ } { status code: 200, headers {

    BDPAGETYPE = 1;

    BDQID = 0x92209f320000f336;

    BDUSERID = 0;

    "Cache-Control" = private;

    Connection = "Keep-Alive";

    "Content-Encoding" = gzip;

    "Content-Type" = "text/html; charset=utf-8";

    "Cxy_all" = "baidu+2ac9d6058fed9a3b872dedc3f4c0b82c";

    Date = "Fri, 04 Sep 2015 07:44:16 GMT";

    Expires = "Fri, 04 Sep 2015 07:44:15 GMT";

    Server = "BWS/1.1";

    "Set-Cookie" = "BDSVRTM=0; path=/, BD_HOME=0; path=/, H_PS_PSSID=16475_16540_16716_1423_17155_13245_14429_12867_16938_16507_17000_16936_17004_17072_15198_11683_13932_16950_16968_10633_17051; path=/; domain=.baidu.com";

    "Transfer-Encoding" = Identity;

    Vary = "Accept-Encoding";

    "X-Powered-By" = HPHP;

    "X-UA-Compatible" = "IE=Edge,chrome=1";

} }

        if let e = error{

            println(e)

            println("无法连接网络")

        }

二 异步加载 

        NSURLConnection.sendAsynchronousRequest(NSURLRequest(URL: NSURL(string: "http://百度.com")!), queue: NSOperationQueue()) { (resp:NSURLResponse!, data:NSData!, error:NSError!) -> Void in

            

            if let e = error {

                println("发生了错误")

            }else{

                println(NSString(data: data, encoding: NSUTF8StringEncoding))

            }


三 GET 与 POST 请求 

    @IBOutlet weak var tvOut: UITextView!

    @IBAction func connectBtnPressed(sender: AnyObject) {

        

        //GET

        NSURLConnection.sendAsynchronousRequest(NSURLRequest(URL: NSURL(string: "http://localhost:8080/MyServer/hello.jsp?name=\(tvInput.text)")!), queue: NSOperationQueue.mainQueue()) { (resp:NSURLResponse!, data:NSData!, error:NSError!) -> Void in

            

            if let d = data {

                self.tvOut.text = NSString(data: d, encoding: NSUTF8StringEncoding)

                

//                dispatch_sync(dispatch_get_main_queue(), { () -> Void in

//                    

//                    self.tvOut.text = NSString(data: d, encoding: NSUTF8StringEncoding)

//                })

                

            }

            

        }

        

        //POST

        

        var req = NSMutableURLRequest(URL: NSURL(string: "http://localhost:8080/MyServer/hello.jsp")!)

        req.HTTPMethod = "POST"

        req.HTTPBody = NSString(string: "name=\(tvInput.text)").dataUsingEncoding(NSUTF8StringEncoding)

        

        NSURLConnection.sendAsynchronousRequest(req, queue: NSOperationQueue.mainQueue()) { (resp:NSURLResponse!, data:NSData!, error:NSError!) -> Void in

            

            if let d = data {

                self.tvOut.text = NSString(data: d, encoding: NSUTF8StringEncoding)

            }

        }

    }

    @IBOutlet weak var tvInput: UITextField!





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值