深入解析 胖爷忘掉的基础头部信息php版
请求行、请求头、请求体
代码讲解模式:
1. 模拟解析 客户端向服务器发送 GET 请求 【 重点 : GET 请求是没有请求体的;一般展示之展示 响应体中的内容】
<?php
// 1.创建sock连接
$fp = fsockopen('localhost',80 ,$error ,$errstr ,10);
// fsockopen(本地标识,端口号,$error , $errstr , 超时时间);
// $error 错误编号 ,这是一个引入的性质,用来存放 错误编号
// $errstr 错误信息
// 10 表示10秒 ,如果10S没成功就断开连接
// 检测 如果连接失败 就打印出 失败信息
if(!$fp){
echo $errstr;die;
}
// 拼接http请求报文
$http = '' ; // 先声明 留着拼接
// 请求报文 包括三个部分1.请求行 ; 2. 请求头3.请求体
// 请求行
$http .="GET /larveral/server.php HTTP/1.1\r\n";
// 第一个是请求方式
// 第二个请求文件的绝对位置相对域名
// 第三部分 协议的版本号 必须加 \r\n[注意外层必须使用双引号 否则不解析
\n]
// 可以在这传递信息 $http .="GET /larveral/server.php?a=1&b=2 HTTP/1.1\r\n";利用$_GET 接收
// 请求头信息
$http .= "Host: localhost\r\n" ; //被请求的主机名
$http .= "Connection: close\r\n\r\n";
//表示创建完链接后 立即关闭 ; 还有一个值是 keep-alive 表示不断开通道可以提高请求速度
// 如果到这请求头完毕 就加两段\r\n
// 请求体 无get请求无请求体post请求则携带请求体
// 发送请求 向流中写入信息
fwrite($fp, $http);
$res =' // 获取结果读一段就拼接一段 没到结尾就继续阅读拼接
while(!feof($fp)){
$res .= fgets($fp);
}
// 返回内容给浏览器
echo $res;
GET的服务器端响应信息
// 响应的结果【】
//
// HTTP/1.1 200 OK 响应行 协议号 与状态码
// Date: Thu, 06 Dec 2018 14:22:40 GMT 响应头
// Server: Apache/2.4.9 (Win64) PHP/5.5.12
// X-Powered-By: PHP/5.5.12
// Content-Length: 10
// Connection: close
// Content-Type: text/html
// I love you响应体响应整个过程 响应回来的一共有三个部分 响应行、响应头隐藏只有响应体显示了
再来个POST版
<?php
// 1.创建sock连接
$fp = fsockopen('localhost',80 ,$error ,$errstr ,10);
// 检测 如果连接失败 就打印出 失败信息
if(!$fp){
echo $errstr;die;
}
// 拼接http请求报文
$http = '' ; // 先声明 留着拼接
// 请求行
$http .="POST /larveral/server.php HTTP/1.1\r\n";
// 第一个是请求方式
// 请求头信息
$http .= "Host: localhost\r\n" ;
$http .= "Connection: close\r\n";
$http .= "Cookie: username=admin;uid=200\r\n"; //存储的cookie
$http .= "User-agent: Chrome/67.0.3396.99 Safari/537.36\r\n";
//这是客户端标识 谷歌、火狐、安卓、IOS都不一样
$http .= "Content-type: application/x-www-form-urlencoded\r\n";
//例如ajax向服务器发送一个post请求 如果没有这句话$_POST就拿不到数据 得用超全局变量 $GLABALS 的 HTTP_RAW_POST_DATA 中
$http .= "Content-length:33 \r\n\r\n"; // 请求长度请求体中有多长 这就写多长 下面不加\r\n 是33
// 请求体
$http .="email=laomo@qq.com&username=admin\r\n";
// 发送请求 向流中写入信息
fwrite($fp, $http);
$res =' // 获取结果读一段就拼接一段 没到结尾就继续阅读拼接
while(!feof($fp)){
$res .= fgets($fp);
}
// 返回内容给浏览器
echo $res;
POST的 服务器结构
<?php
// 1.打印$_post 的结果有没有过来
// var_dump($_POST);
// 打印cookie
// var_dump($_COOKIE);
// 打印serve的内容
// var_dump($_SERVER);
// 看见这个$_SERVER 的值,可以模拟很多东西
// 超全局变量 $GLOBALS
var_dump($GLOBALS);
页:
[1]