PHP再学习1——cURL表单提交、HTTP请求和响应分析


1.前言

最近迷恋WEB方面的技术,虽然自己是一个嵌入式工程师,但是我深知若需要把传感器终端的数据推送至“平台”必然会和WEB技术打交道。在工作中发现嵌入式工程师喜欢 二进制形式的协议,例如MODBUS。虽然这些协议使用广泛,但是使用这些协议需要在服务器侧专门做一个复杂的解析程序,之后再把数据搬入数据库,这便带来了升级或修改的风险。如果可以使用现有的 HTTP 表单手段或 JSON+RESTFUL手段,是不是可以简化嵌入式推送数据至互联网的过程。答案是可以,那就从PHP表单开始“复习”吧。

2.最简单PHP表单

在这里创建一个welcome.html的文件,文件内容如下:
<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>

在这个非常简单的HTML文件中具有两个文本框,两个的名称分别是name和age,该表单的提交方法为POST,welcome.php会处理该提交内容,或通过网页显示或通过存储至数据库。
再创建一个welcome.php的文件,文件内容如下:
<html>
<body>
Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old.
</body>
</html>

提交的表单有两个内容,一个名称为name另一个名称为age。在PHP中可以通过全局数据$_POST["name"]或$_POST["age"]表示,例如$_POST["name"]表示xukai,$_POST["age"]表示26。运行一下welcome.html那么整个过程和结果也就一目了然了。(但是这之前需要安装apache和PHP,如果是windows平台的话可以使用wampserver这样的集成安装包)。

图1 welcome.html

图2 welcome.php执行结果

3.使用cURL提交表单

如果只运行welcome.html,查看welcome.php的运行结果那么整个表单处理过程依然显得非常模糊。此时可使用cURL工具手动提交表单,这相当于代替welcome.html直接提交表单内容。提交表单需要通过HTTP协议的POST方法,使用cURL工具时默认为GET方法,使用其他方法需要使用-X修饰符,之后跟上HTTP方法名称,例如POST或PUT。另外表单的内容通过&连接,例如name=xukai&age=26。cURL命令具体内容
curl -X POST --data "name=xukai&age=26" http://localhost/welcome.php
执行结果:
<html>
<body>
Welcome xukai.<br />
You are 26 years old.
</body>
</html>

4.HTTP通信抓包分析

通过cURL工具可以熟悉表单的提交方法,但是除了表单内容之外还包括了HTTP请求头和HTTP请求属性等部分。通过网络抓包工具,HTTP请求和响应的具体内容如下:

<Http请求>
POST /welcome.php HTTP/1.1
User-Agent: curl/7.29.0
Host: localhost
Accept: */*
Content-Length: 17
Content-Type: application/x-www-form-urlencoded

name=xukai&age=26


<Http响应>
HTTP/1.1 200 OK
Date: Wed, 18 Dec 2013 13:49:15 GMT
Server: Apache/2.4.4 (Win32) PHP/5.4.16
X-Powered-By: PHP/5.4.16
Content-Length: 81
Content-Type: text/html

<html>
<body>
Welcome xukai.<br />
You are 26 years old.
</body>
</html>

在HTTP请求中
POST /welcome.php HTTP/1.1中POST为请求方法,/welcome.php为文件地址,HTTP/1.1为HTTP协议版本编号。User-Agent: curl/7.29.0表示代理器的名称,该属性非必须。Host: localhost为远程主机名称,在这里在localhost意为本机,此处也可以为192.168.1.106或者example.com等合法地址或域名,该属性为必须。Accept: */*表示接受内容,该属性非必须。Content-Length: 17表示被提交表单的长度,该属性为必须。Content-Type: application/x-www-form-urlencoded表示表单的编码格式,该属性为必须。name=xukai&age=26为表单内容,属于HTTP请求内容部分。HTTP请求属性和HTTP请求内容之间存在一个空行。

在HTTP响应中
HTTP/1.1 200 OK表示请求成功。

5.总结

通过一个简单的例子复习PHP表单技术,通过cURL工具和HTTP抓包工具分析HTTP请求和响应,为MCU提交表单做技术准备。

6.参考博文

cURL工具使用: http://blog.csdn.net/xukai871105/article/details/17173771


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn