Heim  >  Artikel  >  Backend-Entwicklung  >  iOS 全栈攻城狮(PHP) -- Session 3

iOS 全栈攻城狮(PHP) -- Session 3

WBOY
WBOYOriginal
2016-06-20 12:41:27880Durchsuche

处理客户端输入

What?

  • 客户端IP
  • 客户端访问的URI(资源路径)
  • User-Agent
  • GET 参数 (使用 URL 传入的参数)
  • POST 参数 (使用 HTTP Body 输入的参数)这些都是常见的客户端输入内容,是客户端访问服务器的过程中,给服务器发送的各种数据。

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<?php$name = $_GET["name"];echo 'Hello, '. $name. '!';

再次运行 Playground,可以看到Hello, Pony! 已经显示在结果栏中了。

结果

确实非常简单就把 GET 参数获取到了,等等,现在逗比产品经理来加一个需求,当 name 为空时,请返回 "Nobody!"。

我们可以稍为修改一下代码,对 $_GET["name"] 使用 empty() 进行判断, empty() 的使用方法看这里。

<?phpif (!empty($_GET["name"])) {    $name = $_GET["name"];    echo 'Hello, '. $name. '!';}else {    echo 'Nobody!';}

尝试一下把 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 就可以了。

<?php//index.phpif (!empty($_POST["name"])) {    $name = $_POST["name"];    echo 'Hello, '. $name. '!';}else {    echo 'Nobody!';}

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

打印

还记得我说过, $_GET 和 $_POST 是数组吗? 在 PHP 的世界里,你可以使用 print_r() 函数打印数组的所有信息,你可以看到当前客户端传入的所有参数,这对于调试应用来说是非常便捷的。

<?phpprint_r($_POST);

客户端收到 PHP 的打印结果如下

Array(    [name] => Pony)

扩展:获取客户端信息

客户端的信息还包括 User-Agent 和 IP 等等,这些信息可以使用 $_SERVER 数组获取,它的获取方法和 GET POST 也完全一样,你可以自行尝试一下获取客户端的 IP 或者 User-Agent。

Ending

获取客户端的输入是服务器开发的重要一步,这里,我们并没有对用户输入作过滤,使用没有过滤过的数据是非常危险的,我将在后续的课程中详细讲解。同时,此节课程还未描述如何获取 POST 请求中 HTTPBody 的方法,这也会在后续的课程中讲解。

下一篇:

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn