首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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

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


2.最简单PHP表单在这里创建一个welcome.html的文件,文件内容如下:
[html] view plaincopy


  • <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的文件,文件内容如下:
[php] view plaincopy


  • <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


执行结果:
[plain] view plaincopy


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



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


  • 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响应>
[plain] view plaincopy


  • 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工具使用
返回列表