Server学习(1),iOS的GET,POST请求是如何被PHP处理的

这篇文章主要讲述iOS客户端发送的GET,POST请求是怎么和服务器端的PHP交互的。顺便梳理一些网络知识,下面先说环境搭建。

服务器端我是用MAC本机搭建,安装了MAMP集成环境,MAMP就是自带了一个Apache作为webserver,然后上面运行PHP脚本,当然后期会再搭建MYSQL数据库进行增删改查操作,MYSQL这一步做完大致上一套从前到后的流程也搭建完毕了。但是这篇文章不涉及MYSQL,只是说明PHP脚本和客户端请求之间的流程。

环境搭建完毕(网上教程一把)后,下面按照请求的种类把客户端和服务器端的代码成对儿的记录下来,这样更便于理解,下面首先是GET请求

GET请求

HTTP请求有很多方法,GET算是最常用的了,http://10.129.153.11/main.php就是一个访问我的MAC本机服务器的请求,当然可以后面加参数http://10.129.153.11/main.php?name=lipengxuan,下面就以这个url为例写一个iOS请求,这里注意的是因为用习惯了AFNetworking或者ASIHttpRequest框架,所以这里用苹果原生的网络请求API,虽然繁琐一点儿但是换一种写法更能理解HTTP请求本身。

下面是GET请求的iOS代码,发送一个GET请求,然后回调用block处理

下面是PHP处理请求代码,基本就干了一件事情,接受GET请求并判断有没有传name参数然后打印不同的结果

这样就大功告成了,输出结果如下图

屏幕快照 2015-05-18 下午3.17.07

一般POST请求,application/x-www-form-urlencoded

POST请求是啥呢

post传的二进制文件一般放在entity-body里面,headers什么都不设置的时候会默认application/x-www-form-urlencoded方式提交post请求,数据按照key1=value1&key2=value2的方式提交服务器端,那么下面就写这么个简单的post请求

下面是iOS的实现

php脚本

然后iOS端发送post请求,结果就能看到了

IMG_3529

好,下面提升一下难度,POST请求发送一张图片给Server,然后Server存起来可以展示

发送二进制文件的POST请求,multipart/form-data

post请求在iOS客户端经常被用于上传图片或者发送其他二进制文件,这种post请求有别于上面的基本的post请求,多用multipart/form-data方式,这种格式就略复杂了,是这样的

content-Type都很好理解,就是有个boundary分界线,传每个文件的时候间隔都要有两个boundary给包起来,常用的网络框架比如AFNetworking都帮你写好post请求的格式了,只要根据提供的API传入二进制数据和名称就可以,实际上AFNetworking也只是帮你的post请求拼成上面的格式,让发送multipart/form-data格式的请求更简单一些,因为没写过,下面就尝试iOS端用这种方式发送带一张图片的post请求,稍后再写PHP怎么接受这个文件

直接上代码

可以看到,为了发这一个图片用multipart方式,直接写Request是很费劲的,得自己拼接boundary,所以框架真的为平时的网络开发节省了很多时间,然后用Charles抓包来看下post请求有没成功的发出去

屏幕快照 2015-05-19 上午11.19.40

屏幕快照 2015-05-19 上午11.19.49

基本上和预计的POST请求格式一样,图片数据部分被转换成了BASE64编码,下面开始写Server端接受这个请求进行处理,主要是用到了$_Files这个方法获取指定name的数组,进行遍历

可以看到结果,证明Server端已经得到了正确的Post请求,传的是二进制图片文件,获得了这个请求上传文件的一些信息

IMG_3563

 

存储POST请求获得的二进制文件

当上传图片后,Server端是自动把图片缓存在一个地址的,这时候要把这个图片存到一个地方,完成图片的存储,要不然Server一关闭这个图片就没了,上面打印出了获得二进制文件的信息,那么接下来编写PHP代码存储获得的二进制文件用于访问

上面的代码做了这些事情:

1.判断获得的文件存不存在

2.判断文件是不是图片类型

3.判断文件大小是否满足要求

4.创建uploads文件夹

5.把上传的二进制文件imgFile(存在tmp里)移动到uploads文件夹

ps.这个uploads文件夹存入方法move_uploaded_file总是失败,一般来说要不是权限问题,要不是绝对路径问题,不过这不是重点

然后访问 10.129.153.11/uploads/testImg.png就可以看到图片了,下面添加一个返回json数据的功能

Php返回Json格式数据

上面我们已经完成了客户端上传图片且Server端接收图片的功能,那么一般客户端开发工程师需要Server端的一个接口来请求数据,下面就继续把发送的图片和成功与否的信息拼一个Json数据返给客户端,然后客户端解析这个Json取出图片url显示图片

 

上面的代码记录了msg为1或者0代表成功与否,url字段放接收POST请求图片的路径,最后用json_encode函数返回一个Json数据给客户端用于使用,这里注意要用到JSON_UNESCAPED_SLASHES,要不json_encode默认会加上转义反斜杠,用stripslashes也删不掉,然后稍微修改一下iOS端进行Json解析

下面看结果,已经可以获得Server端返回的数据并转换成字典了。

IMG_3566

好,下一步,连接数据库

 

 

 

 

 

 

 

 

 

1 评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注