原文链接:http://www.nowamagic.net/academy/detail/12220214
fsockopen 除了前面小节的模拟生成 HTTP 连接之外,还能实现很多功能,比如模拟 post 和 get 传送数据的方法。比如下面的例子:
//fsocket模拟post提交 $url = "http://localhost/test2.php?site=nowamagic.net"; print_r(parse_url($url)); //echo $query; sock_get($url,"user=gonn"); //sock_get($url, $query); //fsocket模拟get提交 function sock_get($url, $query) { $data = array( 'foo'=>'bar', 'baz'=>'boom', 'site'=>'www.nowamagic.net', 'name'=>'nowa magic'); $query_str = http_build_query($data); $info = parse_url($url); $fp = fsockopen($info["host"], 80, $errno, $errstr, 3); //$head = "GET ".$info['path']."?".$info["query"]." HTTP/1.0 "; $head = "GET ".$info['path']."?".$query_str." HTTP/1.0 "; $head .= "Host: ".$info['host']." "; $head .= " "; $write = fputs($fp, $head); while (!feof($fp)) { $line = fread($fp,4096); echo $line; } } sock_post($url,"user=gonn"); function sock_post($url, $query) { $info = parse_url($url); $fp = fsockopen($info["host"], 80, $errno, $errstr, 3); $head = "POST ".$info['path']."?".$info["query"]." HTTP/1.0 "; $head .= "Host: ".$info['host']." "; $head .= "Referer: http://".$info['host'].$info['path']." "; $head .= "Content-type: application/x-www-form-urlencoded "; $head .= "Content-Length: ".strlen(trim($query))." "; $head .= " "; $head .= trim($query); $write = fputs($fp, $head); while (!feof($fp)) { $line = fread($fp,4096); echo $line; } }
接收页面 test2.php 的代码为:
$data = $_REQUEST; echo '<pre>'; print_r( $data ); echo '</pre>';