iOS 全棧攻城獅(PHP) -- Session 3

來源:互聯網
上載者:User

處理用戶端輸入

What?

  • 用戶端IP
  • 用戶端訪問的URI(資源路徑)
  • User-Agent
  • GET 參數 (使用 URL 傳入的參數)
  • POST 參數 (使用 HTTP Body 輸入的參數)這些都是常見的用戶端輸入內容,是Client Access Server的過程中,給伺服器發送的各種資料。

How?

GET

使用 PHP 擷取輸入非常簡單,使用 $_GET 或者 $_POST 就可以擷取到GET和POST參數,它們是一個數組。

現在我們使用 iOS 用戶端發送一個請求到 http://localhost/index.php?name=Pony

//Swift Playground//你可以在 Xcode 中建立一個 Playground 運行以下代碼import UIKitlet request = NSMutableURLRequest(URL: NSURL(string: "http://localhost/index.php?name=Pony")!)NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { (response, responseData, error) -> Void in    if let responseData = responseData {        if let responseString = String(data: responseData, encoding: NSUTF8StringEncoding) {            print(responseString)        }    }}NSRunLoop.currentRunLoop().runUntilDate(NSDate(timeIntervalSinceNow: 10))

這是一個很簡單的請求,我們只要發送一個 GET 請求到 http://localhost/index.php ,然後帶上 GET 參數, Key = name Value = Pony。最後,我們擷取伺服器返回的資料,轉換為 String 列印出來。如無意外,你可以在 Playground 中看到返回的結果。

現在,我們修改 index.php,讓 index.php 可以擷取到 Pony 這個字串,並且返回處理好的字串給用戶端。

//index.php   

再次運行 Playground,可以看到Hello, Pony! 已經顯示在結果欄中了。

結果

確實非常簡單就把 GET 參數擷取到了,等等,現在逗比產品經理來加一個需求,當 name 為空白時,請返回 "Nobody!"。

我們可以稍為修改一下代碼,對 $_GET["name"] 使用 empty() 進行判斷, empty() 的使用方法看這裡。

   

嘗試一下把 URL 中的 Pony 去掉看看執行結果?

POST

擷取 POST 表單中的參數與擷取 GET 中的方法完全一樣!但是,我們先要在 Playground 中修改我們發送請求的代碼,讓它發送 POST 請求。

import UIKitlet request = NSMutableURLRequest(URL: NSURL(string: "http://localhost/index.php")!)request.HTTPMethod = "POST"request.HTTPBody = "name=Pony".dataUsingEncoding(NSUTF8StringEncoding)NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { (response, responseData, error) -> Void in    if let responseData = responseData {        if let responseString = String(data: responseData, encoding: NSUTF8StringEncoding) {            print(responseString)        }    }}NSRunLoop.currentRunLoop().runUntilDate(NSDate(timeIntervalSinceNow: 10))

然後,把 index.php 中 $_GET 的部分換成 $_POST 就可以了。

   

運行一下 Playground 就可以看到效果了。

列印

還記得我說過, $_GET 和 $_POST 是數組嗎? 在 PHP 的世界裡,你可以使用 print_r() 函數列印數組的所有資訊,你可以看到當前用戶端傳入的所有參數,這對於調試應用來說是非常便捷的。

   

用戶端收到 PHP 的列印結果如下

Array(    [name] => Pony)

擴充:擷取用戶端資訊

用戶端的資訊還包括 User-Agent 和 IP 等等,這些資訊可以使用 $_SERVER 數組擷取,它的擷取方法和 GET POST 也完全一樣,你可以自行嘗試一下擷取用戶端的 IP 或者 User-Agent。

Ending

擷取用戶端的輸入是伺服器開發的重要一步,這裡,我們並沒有對使用者輸入作過濾,使用沒有過濾過的資料是非常危險的,我將在後續的課程中詳細講解。同時,此節課程還未描述如何擷取 POST 請求中 HTTPBody 的方法,這也會在後續的課程中講解。

下一篇:

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.