• 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.参考博文




  • 相关阅读:
    线性回归(Linear Regression)的理解及原理
    3个模型搞清楚用户留存分析
    机器学习简单介绍
    数据分析经典方法:5W2H分析法
    使用guava RateLimiter限流
    Maven之assembly自定义打包
    IDE自动编译
    神奇的$scope
    二分法查找
    深入理解CSS选择器优先级
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3483390.html
Copyright © 2020-2023  润新知