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

前端之家收集整理的这篇文章主要介绍了Swift语言IOS8开发战记25 网络通信Get和Post方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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方式的同步请求,请看以下代码

  1. import UIKit
  2.  
  3. class ViewController: UIViewController {
  4.  
  5. @IBAction func showWeatherJson(sender: UIButton) {
  6. //创建url
  7. var url:NSURL! = NSURL(string: "http://www.weather.com.cn/adat/sk/101010100.html")
  8. //创建请求对象
  9. var urlRequest:NSURLRequest = NSURLRequest(URL: url,cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy,timeoutInterval: 10)
  10. //创建响应对象
  11. var response:NSURLResponse?
  12. //创建错误对象
  13. var error:NSError?
  14. //发出请求
  15. var data:NSData? = NSURLConnection.sendSynchronousRequest(urlRequest,returningResponse: &response,error: &error)
  16. if error != nil
  17. {
  18. println(error?.code)
  19. println(error?.description)
  20. } else {
  21. var jsonString = NSString(data: data!,encoding: NSUTF8StringEncoding)
  22. println(jsonString)
  23. }
  24. }
  25. }

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

URL参数:请求路径

cachePolicy参数:缓存协议

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

缓存协议是个枚举类型:

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

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

同步Post方法如下,把参数放到HTTP的body中,安全性比较高
  1. import UIKit
  2.  
  3. class ViewController: UIViewController {
  4.  
  5. @IBAction func showWeatherJson(sender: UIButton) {
  6. //创建url
  7. var url:NSURL! = NSURL(string: "http://api.hudong.com/iphonexml.do")
  8. //创建请求对象
  9. var urlRequest:NSMutableURLRequest = NSMutableURLRequest(URL: url,timeoutInterval: 10)
  10. urlRequest.HTTPMethod = "POST"//设置请求方式为POST,默认为GET
  11. var str:String = "type=focus-c"//设置参数
  12. var data:NSData = str.dataUsingEncoding(NSUTF8StringEncoding,allowLossyConversion: true)!
  13. urlRequest.HTTPBody = data
  14. //创建响应对象
  15. var response:NSURLResponse?
  16. //创建错误对象
  17. var error:NSError?
  18. //发出请求
  19. var received:NSData? = NSURLConnection.sendSynchronousRequest(urlRequest,error: &error)
  20.  
  21. if error != nil
  22. {
  23. println(error?.code)
  24. println(error?.description)
  25. } else {
  26. var jsonString = NSString(data: received!,encoding: NSUTF8StringEncoding)
  27. println(jsonString)
  28. }
  29. }
  30. }

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

猜你在找的Swift相关文章