php socket 模拟http请求

<?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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值