Swift语言IOS8开发战记25 网络通信Get和Post方式

Swift语言IOS8开发战记25 网络通信Get和Post方式,第1张

概述Get是从服务器上获取数据,Post是向服务器传送数据。对于Get方式,服务器端用Requset.QueryString获取变量的值,对于Post方式,服务器端用Request.Form获取提交的数据。Get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内个个字段一一对应,在URL中可以看到。Post是通过HTTP Post机制,将表单内各个字段与其内容放置在HTML HE

Get是从服务器上获取数据,Post是向服务器传送数据。对于Get方式,服务器端用Requset.queryString获取变量的值,对于Post方式,服务器端用Request.Form获取提交的数据。Get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内个个字段一一对应,在URL中可以看到。Post是通过http Post机制,将表单内各个字段与其内容放置在HTML header内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

Get安全性非常低,Post安全性较高,但是Get方式的执行效率比Post好。

所以建议使用Get做查询,使用Post做增、删、改。

开发战记第24话中我们使用的同步获取天气信息的方法就是一种Get方式的同步请求,请看以下代码:

import UIKitclass VIEwController: UIVIEwController {    @IBAction func showWeatherjson(sender: UIbutton) {        //创建url        var url:NSURL! = NSURL(string: "http://www.weather.com.cn/adat/sk/101010100.HTML")       //创建请求对象        var urlRequest:NSURLRequest = NSURLRequest(URL: url,cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy,timeoutInterval: 10)        //创建响应对象        var response:NSURLResponse?        //创建错误对象        var error:NSError?        //发出请求        var data:NSData? = NSURLConnection.sendSynchronousRequest(urlRequest,returningResponse: &response,error: &error)        if error != nil        {        println(error?.code)        println(error?.description)                } else {        var JsonString = Nsstring(data: data!,enCoding: NSUTF8StringEnCoding)            println(JsonString)                }            }}

这里创建NSURLRequest对象的时候,使用了一个更加复杂的构造器:

URL参数:请求路径

cachePolicy参数:缓存协议

timeoutInterval参数:网络请求超时时间(单位:秒)

缓存协议是个枚举类型:

enum NSURLRequestCachePolicy : UInt {        case UseProtocolCachePolicy//基础策略        case ReloadIgnoringLocalCacheData//忽略本地缓存    case ReloadIgnoringLocalAndRemoteCacheData // Unimplemented 无视任何缓存策略,总是从源地址重新下载        case ReturnCacheDataElseLoad //首先使用缓存,没有本地缓存,才用源地址下载    case ReturnCacheDataDontLoad //使用本地缓存,从不下载,如果没有本地缓存,则请求失败,此策略多用于离线 *** 作        case ReloadRevalIDatingCacheData // Unimplemented 如果本地缓存是有效的则不下载,其他任何情况都从源地址重新下载}

下面介绍异步Get请求方式:
 func asynchronousGet() {                //创建NSURL对象        var url:NSURL! = NSURL(string: "<span >http://API.hudong.com/iphonexml.do?type=focus-c</span><span >")//参数直接写到路径中</span>        //创建请求对象        var urlRequest:NSURLRequest = NSURLRequest(URL: url,timeoutInterval: 10)        //网络连接对象        var conn:NSURLConnection? = NSURLConnection(request: urlRequest,delegate: self)            }
在连接了服务器之后,使用下面两个异步请求的代理方法NSURLConnectionDataDelegate,来接收相关数据。
 func connection(connection: NSURLConnection,dIDReceiveResponse response: NSURLResponse) {        //接收响应    }    var JsonData:NSMutableData = NSMutableData()    func connection(connection: NSURLConnection,dIDReceiveData data: NSData) {        //收到数据,此方法根据数据大小执行若干次        JsonData.appendData(data)    }

同步Post方法如下,把参数放到http的body中,安全性比较高
import UIKitclass VIEwController: UIVIEwController {    @IBAction func showWeatherjson(sender: UIbutton) {        //创建url        var url:NSURL! = NSURL(string: "http://API.hudong.com/iphonexml.do")       //创建请求对象        var urlRequest:NSMutableURLRequest = NSMutableURLRequest(URL: url,timeoutInterval: 10)            urlRequest.httpMethod = "POST"//设置请求方式为POST,默认为GET        var str:String = "type=focus-c"//设置参数        var data:NSData = str.dataUsingEnCoding(NSUTF8StringEnCoding,allowLossyConversion: true)!        urlRequest.httpBody = data                //创建响应对象        var response:NSURLResponse?        //创建错误对象        var error:NSError?        //发出请求        var received:NSData? = NSURLConnection.sendSynchronousRequest(urlRequest,error: &error)                if error != nil        {        println(error?.code)        println(error?.description)                } else {        var JsonString = Nsstring(data: received!,enCoding: NSUTF8StringEnCoding)            println(JsonString)                }            }}

异步Post请求方式如下:
 var url:NSURL! = NSURL(string: "http://API.hudong.com/iphonexml.do")       //创建请求对象        var urlRequest:NSMutableURLRequest = NSMutableURLRequest(URL: url,allowLossyConversion: true)!        urlRequest.httpBody = data        var connection = NSURLConnection(request: urlRequest,delegate: self)
然后就可以在代理方法中进行 *** 作了。 总结

以上是内存溢出为你收集整理的Swift语言IOS8开发战记25 网络通信Get和Post方式全部内容,希望文章能够帮你解决Swift语言IOS8开发战记25 网络通信Get和Post方式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1087128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存