cleey
望着那一丝海线,若隐若现。落日下的海霞,数不尽的美,看不完的醉
fsockopen 实现模拟网站请求

可以使用fsockopen实现简单的异步请求,模拟http报文请求,这里是关于 post请求的例子:
client.php

<?php 
header('Content-type: text/html;charset=utf8');

$url = 'http://h5.cleey.com/home/index/index';
$post = array( 'mid' => 23, 'more'=> 'hello' );
sock_post($url,$post);

function sock_post($url,$post){
	$info = parse_url($url);  // 解析url
	$text = http_build_query($post);
	
	// 与服务器建立连接
	// 参数意义:h5.cleey.com(也可以直接写IP),端口,错误编号,错误信息,超时时间.
	// 利用超时时间可以很短的退出。而目标地址,可以ignore user abort,继续执行。
	$fp = fsockopen($info['host'], 80, $errno, $errstr, 1000) ;
	if (!$fp) { echo "$errstr ($errno)<br />\n";return; }

	// 模拟http 报文了。
	$out = "POST {$info['path']}?{$info['query']} HTTP/1.1\r\n";
	$out .= "Host: {$info['host']}\r\n";
	$out .= "Content-type:application/x-www-form-urlencoded\r\n";
	$out .= "Content-length: ".strlen($text)."\r\n";
	$out .= "Connection: close\r\n\r\n";
	$out .= $text;
	fputs($fp, $out); // 做请求。

	/*执行结果 可以直接忽略,我们只需通知目标地址就行了,不需要知道执行结果*/
	echo '<pre>';
	while (!feof($fp)) { echo fgets($fp, 1024); }
	/*执行结果 结束*/

	fclose($fp);
}


?>

sever.php 

echo 'Welcome to use PhpPoem!';
echo '<pre>';
echo '$_REQUEST 变量为:<br>';
var_export($_REQUEST);
exit;

执行 client.php 的结果如下:

HTTP/1.1 200 OK
Server: nginx/1.0.15
Date: Mon, 14 Mar 2016 03:30:31 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: close
X-Powered-By: PhpPoem_v2.0

63
Welcome to use PhpPoem!
$_REQUEST 变量为:
array (
  'mid' => '23',
  'more' => 'hello',
)
0

<< 上一篇 PHP读写文件锁 MySQL数据类型和常用字段属性总结 -- 字段类型 下一篇 >>
文章标签
随意 | Created At 2014 By William Clinton | 蜀ICP备14002619号-4 |