<?php
//fsockopen — 打开一个网络连接或者一个Unix套接字连接 注意这里只能是 域名 或 ip
$flag = 0;
$params = '';
$errno = '';
$errstr = '';
//要post的数据
$argv = [
'a'=>'aa',
'b'=>'bb'
];
//构造要post的字符串
foreach ($argv as $key=>$value) {
if ($flag!=0) {
$params .= "&";
$flag = 1;
}
$params.= $key."="; $params.= urlencode($value);
$flag = 1;
}
$length = strlen($params);
//创建socket连接 fsockopen — 打开一个网络连接或者一个Unix套接字连接 注意这里只能是 域名 或 ip
$fp = fsockopen("localhost",80,$errno,$errstr,10) or exit($errstr."--->".$errno);
//构造post请求的头
$header = "POST /index.php HTTP/1.1\r\n";
$header .= "Host:game.shopc.top\r\n";
$header .= "Referer:localhost\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: ".$length."\r\n";
$header .= "Connection: Close\r\n\r\n";
//添加post的字符串
$header .= $params."\r\n";
//发送post的数据
//int fwrite ( resource $handle , string $string [, int $length ] ) 函数原型 $length 当写完指定 $length 个字节(注意是字节)会停止写入 出现错误时则返回 FALSE
fputs($fp,$header);//fputs 是 fwrite的别名
$inheader = 1;
//feof — 测试文件指针是否到了文件结束的位置 如果文件指针到了 EOF 或者出错时则返回 TRUE
while (!feof($fp)) {
$line = fgets($fp,1024); //去除请求包的头只显示页面的返回数据.fgets 从指针 handle 指向的文件中读取了 length - 1 字节后返回字符串。 如果文件指针中没有更多的数据了则返回 FALSE。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)
echo $line;
}
fclose($fp);
php socket 模拟http请求
最新推荐文章于 2023-02-09 15:46:20 发布