老莫的笔记本  
  
查看: 1268|回复: 0

深入解析 胖爷忘掉的基础头部信息php版

[复制链接]

662

主题

878

帖子

5143

积分

超级版主

Rank: 8Rank: 8

积分
5143
发表于 2018-12-6 23:20:08 | 显示全部楼层 |阅读模式

请求行、请求头、请求体
代码讲解模式:
1. 模拟解析 客户端向服务器发送 GET 请求 【 重点 : GET 请求是没有请求体的;一般展示之展示 响应体中的内容】
  1. <?php
  2.     // 1.创建sock连接
  3.     $fp = fsockopen('localhost',80 ,$error ,$errstr ,10);   
  4.     // fsockopen(本地标识,端口号,$error , $errstr , 超时时间);
  5.     // $error 错误编号 ,这是一个引入的性质,用来存放 错误编号
  6.     // $errstr 错误信息
  7.     // 10 表示10秒 ,如果10S没成功就断开连接
  8.    
  9.     // 检测       如果连接失败 就打印出 失败信息
  10.     if(!$fp){
  11.         echo $errstr;die;
  12.     }
  13.     // 拼接http请求报文
  14.     $http = '' ;    // 先声明 留着拼接
  15.    
  16.     // 请求报文 包括三个部分  1.请求行 ; 2. 请求头  3.请求体
  17.    
  18.     // 请求行
  19.     $http .="GET /larveral/server.php HTTP/1.1\r\n";   
  20.     // 第一个是请求方式  
  21.     // 第二个请求文件的绝对位置相对域名
  22.     // 第三部分 协议的版本号 必须加 \r\n  [注意外层必须使用双引号 否则不解析
  23. \n]
  24.     // 可以在这传递信息 $http .="GET /larveral/server.php?a=1&b=2 HTTP/1.1\r\n";  利用$_GET 接收
  25.    
  26.     // 请求头信息
  27.     $http .= "Host: localhost\r\n" ;    //被请求的主机名
  28.     $http .= "Connection: close\r\n\r\n";   
  29.      //表示创建完链接后 立即关闭 ; 还有一个值是 keep-alive 表示不断开通道可以提高请求速度
  30.      // 如果到这  请求头完毕 就加两段  \r\n
  31.      
  32.     // 请求体 无  get请求无请求体  post请求则携带请求体
  33.    
  34.     // 发送请求   向流中写入信息
  35.     fwrite($fp, $http);
  36.     $res ='    // 获取结果  读一段就拼接一段 没到结尾就继续阅读拼接
  37.     while(!feof($fp)){
  38.         $res .= fgets($fp);
  39.     }
  40.     // 返回内容给浏览器
  41.     echo $res;
复制代码
GET的服务器端响应信息
  1.     // 响应的结果【】
  2.     //
  3.     // HTTP/1.1 200 OK              响应行   协议号 与状态码
  4.     // Date: Thu, 06 Dec 2018 14:22:40 GMT     响应头
  5.     // Server: Apache/2.4.9 (Win64) PHP/5.5.12         
  6.     // X-Powered-By: PHP/5.5.12
  7.     // Content-Length: 10
  8.     // Connection: close
  9.     // Content-Type: text/html
  10.     // I love you  响应体  响应整个过程 响应回来的一共有三个部分 响应行、响应头隐藏  只有响应体显示了
复制代码


再来个POST版
  1. <?php
  2.     // 1.创建sock连接
  3.     $fp = fsockopen('localhost',80 ,$error ,$errstr ,10);   
  4.     // 检测       如果连接失败 就打印出 失败信息
  5.     if(!$fp){
  6.         echo $errstr;die;
  7.     }
  8.     // 拼接http请求报文
  9.     $http = '' ;    // 先声明 留着拼接
  10.    
  11.     // 请求行
  12.     $http .="POST /larveral/server.php HTTP/1.1\r\n";   
  13.     // 第一个是请求方式  
  14.     // 请求头信息
  15.     $http .= "Host: localhost\r\n" ;   
  16.     $http .= "Connection: close\r\n";   
  17.     $http .= "Cookie: username=admin;uid=200\r\n";      //存储的cookie
  18.     $http .= "User-agent: Chrome/67.0.3396.99 Safari/537.36\r\n";        
  19.      //这是客户端标识 谷歌、火狐、安卓、IOS都不一样
  20.     $http .= "Content-type: application/x-www-form-urlencoded\r\n";     
  21.      //例如ajax向服务器发送一个post请求 如果没有这句话  $_POST就拿不到数据   得用超全局变量 $GLABALS 的 HTTP_RAW_POST_DATA 中
  22.     $http .= "Content-length:33 \r\n\r\n";   // 请求长度  请求体中有多长 这就写多长 下面不加\r\n 是33
  23.     // 请求体
  24.     $http .="email=laomo@qq.com&username=admin\r\n";
  25.     // 发送请求   向流中写入信息
  26.     fwrite($fp, $http);
  27.     $res ='    // 获取结果  读一段就拼接一段 没到结尾就继续阅读拼接
  28.     while(!feof($fp)){
  29.         $res .= fgets($fp);
  30.     }
  31.     // 返回内容给浏览器
  32.     echo $res;
复制代码
POST的 服务器结构
  1. <?php
  2.    
  3.     // 1.打印$_post 的结果有没有过来
  4.     // var_dump($_POST);  
  5.    
  6.     // 打印cookie
  7.     // var_dump($_COOKIE);
  8.    
  9.     // 打印serve的内容  
  10.     // var_dump($_SERVER);
  11.      // 看见这个$_SERVER 的值,可以模拟很多东西
  12.     // 超全局变量 $GLOBALS
  13.     var_dump($GLOBALS);
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表