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方式の同期要求であり、以下のコードを参照してください.
URLパラメータ:要求パス
CachePolicyパラメータ:キャッシュプロトコル
timeoutIntervalパラメータ:ネットワーク要求タイムアウト時間(単位:秒)
キャッシュ・プロトコルは列挙タイプです.
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)
その後、エージェントメソッドで操作できます.