您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
http协议模拟发送
发布时间:2019-09-04 22:00:02编辑:雪饮阅读()
get请求
在站点根目录建立client.php
<?php
//创建连接
//localhost:请求对方的主机地址
//80:请求对方主机的端口
//$errno,当有错误发生时就会将错误号返回到该变量中
//$errstr 当有错误发生时就会将错误信息返回到该变量中
//10 超时时间
$fp=fsockopen('localhost',80,$errno,$errstr,10);
if(!$fp) {echo $errstr;die;};
//http报文
$http='';
//请求报文包括三个部分,请求行,请求头,请求体
//请求行
//GET:请求类型
// /server.php:请求路径(必须是绝对路径),此绝对路径和上面创建连接处的主机地址就组成了完整的请求url
// HTTP/1.1 请求协议及版本号
// \r\n:求头和请求体规定每行结束必须以\r\n结尾,请求头和请求体每段节结束则是两个\r\n
$http.="GET /server.php?a=1&b=2 HTTP/1.1\r\n";
//请求头(此处的请求host随便填都可以,比如填www.baidu都行)
$http.="Host:localhost\r\n";
$http.="Connection:close\r\n\r\n";
//向请求流写入请求内容(由于这里是get请求,所以可以没有请求体)
fwrite($fp,$http);
//获取请求结果
//如果没有读取到响应内容尾部则继续循环读取,默认每次读取1kb
$res='';
while(!feof($fp)){
$res.=fgets($fp);
}
echo $res;
?>
同时再建立一个用于模拟请求目标的服务端server.php
<?php
var_dump($_GET);
?>
那么访问client.php则如
那么post请求
client.php
<?php
//创建连接
$fp=fsockopen('localhost',80,$errno,$errstr,10);
if(!$fp) {echo $errstr;die;};
//http报文
$http='';
$http.="POST /server.php HTTP/1.1\r\n";
//请求头
$http.="Host: localhost\r\n";
$http.="Connection: close\r\n";
$http.="Cookie:username=xy;uid=dmj\r\n";
$http.="User-agent:vivox20 plugs\r\n";
//这个很关键,你懂得
$http.="Content-type: application/x-www-form-urlencoded\r\n";
//先定义一个请求体文本,因为这里要获取请求体长度
$body="email=1509272975&wife=dmj";
$http.="Content-length:".strlen($body)."\r\n\r\n";
//请求体
$http.=$body."\r\n";
//向请求流写入请求内容
fwrite($fp,$http);
//获取请求结果
$res='';
while(!feof($fp)){
$res.=fgets($fp);
}
echo $res;
?>
server.php
<?php
var_dump($_POST);
var_dump($_COOKIE);
?>
访问结果如:
关键字词:http,协议,php,模拟
上一篇:PHP代码审计入门学习笔记
下一篇:命名空间和虚拟主机搭建