Swift言語IOS 8戦記25ネットワーク通信GetとPost方式を開発


Getはサーバからデータを取得し,Postはサーバへデータを転送する.Get方式ではサーバ側がRequset.QueryStringで変数の値を取得し,Post方式ではサーバ側がRequest.Formでコミットしたデータを取得する.Getは,パラメータデータキューをコミットフォームのACTION属性が指すURLに加え,値とフォーム内の各フィールドが1つずつ対応しており,URLに見られる.Postは、HTTP Postメカニズムにより、フォーム内の各フィールドをその内容とともにHTML HEADER内に配置してACTION属性が指すURLアドレスに転送する.ユーザーはこのプロセスを見ることができません.
Getセキュリティは非常に低く、Postセキュリティは高いが、Get方式の実行効率はPostより良い.
だからGetを使ってクエリーをして、Postを使って増加、削除、変更することをお勧めします.
開発戦記第24話で我々が使用している同期で天気情報を取得する方法はGet方式の同期要求であり、以下のコードを参照してください.
import UIKit

class 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 style="font-family: Arial, Helvetica, sans-serif;">http://api.hudong.com/iphonexml.do?type=focus-c</span><span style="font-family: Arial, Helvetica, sans-serif;">")//         </span>
        //      
        var urlRequest:NSURLRequest = NSURLRequest(URL: url, cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy, timeoutInterval: 10)
        //      
        var conn:NSURLConnection? = NSURLConnection(request: urlRequest, delegate: self)
        
    }
サーバに接続した後、次の2つの非同期要求のプロキシメソッド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 UIKit

class 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, cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy, 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, returningResponse: &response, 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, cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy, 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 connection = NSURLConnection(request: urlRequest, delegate: self)
その後、エージェントメソッドで操作できます.