标签 网络 下的文章

发送http请求(get,post)

//
//  ViewController.swift
//  http请求
//
//  Created by admin on 16/2/26.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.post()
    }
    func post()
    {
        let urlStr = "http://test.com/login.php"
        // url中含有中文的话需要编码下
        let url = NSURL(string: urlStr.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)

        // 初始化可变请求,用以之后改变对象的属性
        let request = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringCacheData, timeoutInterval: 10)
        request.HTTPMethod = "post"
        // 设置post数据,为字符串格式
        let postData = "username=张三&password=zhang"
        // 设置请求的data,需要转换成二进制的数据类型
        request.HTTPBody = postData.dataUsingEncoding(NSUTF8StringEncoding)
        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) { (responce:NSURLResponse?, data:NSData?, error:NSError?) -> Void in
            if data != nil
            {
                let json:AnyObject? = try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
                print(json)
            }

        }
    }
    func get()
    {
        let urlStr = "http://test.com/login.php?username=张三&password=zhang"
        // url中含有中文的话需要编码下
        let url = NSURL(string: urlStr.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)
        let request = NSURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringCacheData, timeoutInterval: 10)
        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) { (responce:NSURLResponse?, data:NSData?, error:NSError?) -> Void in
            if data != nil
            {
                let json:AnyObject? = try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
                print(json)
            }

        }
    }
}

swift发送http请求的基本使用

//
//  ViewController.swift
//  网络
//
//  Created by admin on 16/2/25.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    let webView = UIWebView(frame: UIScreen.mainScreen().bounds)
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addSubview(self.webView)
        self.requestB()
    }

    // 发送请求,NSURLConnection,同步
    func requestC()
    {
        // 确定url
        let url = NSURL(string: "https://m.baidu.com")
        // 设置请求
        let request = NSURLRequest(URL: url!)
        var responce:NSURLResponse?
        // 发送请求,NSURLConnection会出警告,所以使用NSURLSession
        let responceData:NSData? = try! NSURLConnection.sendSynchronousRequest(request, returningResponse: &responce)
        self.webView.loadHTMLString(String(data: responceData!, encoding: NSUTF8StringEncoding)!, baseURL: nil)
    }
    // 发送请求,NSURLConnection会出警告,所以使用NSURLSession,异步的
    func requestA()
    {
        // 确定url
        let url = NSURL(string: "https://m.baidu.com")
        // 设置请求
        /**
        参数:url:资源路径
        cachePolicy:缓存策略
        NSURLRequestUseProtocolCachePolicy = 0, // 默认缓存策略,会自动缓存

        NSURLRequestReload(刷新)Ignoring(忽略)Local(本地)CacheData(缓存数据) = 1, 每次都从服务器去加载数据。忽略本地缓存

        **** 底下两个 一般来离线访问。一般配合Reachability(苹果提供的检测网络连接的框架)使用
        // 如果用户使用的wifi,就使用这个策略
        NSURLRequestReturnCacheDataElseLoad = 2, // 如果有缓存,就用缓存。没有就上网加载
        // 如果用户使用的3G,就使用下面的策略
        NSURLRequestReturnCacheDataDontLoad = 3, // 如没有缓存,就用缓存。没有返回空,死活不上网


        timeoutInterval:超时时间,默认是60秒,一般设置15~20秒。超过这个时间以后,如果服务器还没有相应,就不继续等待了
        SDWebImage超时时长设置的是-->15秒
        AFN超时时长 60秒
        */
        let request = NSURLRequest(URL: url!)
        // 发送请求
        /**
        参数:Request 请求
        queue: 队列,这个队列,是完成以后,回调block执行的队列、
        Asynchronous:只要是异步,肯定会开新的线程

        // 使用场景:如果下载的是压缩包,解压缩也是耗时操作。也需要放在子线程
        // 如果回调block里面只需要更新UI,那么就可以只开始指定queue为主队列

        Handler:网络访问完成以后执行的代码块
        response: 服务器的响应(包含响应行/响应头...下载的时候才去关心这个)
        data: 返回的二进制数据
        connectionError:在连接服务器的时候的错误,只要是能正常连接到服务器,就不会有错。
        只要有网络候出现的错访问,就会可能有错误
        */
        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { [weak self] (response:NSURLResponse?, data:NSData?, error:NSError?) -> Void in
            self?.webView.loadHTMLString(String(data: data!, encoding: NSUTF8StringEncoding)!, baseURL: nil)
        }
    }
    // NSURLSession发送请求
    func requestB()
    {
        // 确定url
        let url = NSURL(string: "https://m.baidu.com")
        // 设置请求
        let request = NSURLRequest(URL: url!)
        // 发送请求,NSURLConnection会出警告,所以使用NSURLSession
        let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
        let task = session.dataTaskWithRequest(request) { [weak self] (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
            dispatch_async(dispatch_get_main_queue(), { [weak self] () -> Void in
                self!.webView.loadHTMLString(String(data: data!, encoding: NSUTF8StringEncoding)!, baseURL: nil)
            })
        }
        task.resume()
    }
}