php中用socket模拟http中post或者get提交数据的示例代码
以下是对php中用socket模拟http中post或者get提交数据的示例代码进行了介绍,需要的朋友可以过来参考下
废话不多说。直接上代码:
sock_post.php:
<?php function sock_post($url, $data='') { $url = parse_url($url); $url['scheme'] || $url['scheme'] = 'http'; $url['host'] || $url['host'] = $_SERVER['HTTP_HOST']; $url['path'][0] != '/' && $url['path'] = '/'.$url['path'];$query = $data; if(is_array($data)) $query = http_build_query($data);
$fp = @fsockopen($url['host'], $url['port'] ? $url['port'] : 80); if (!$fp) return "Failed to open socket to $url[host]";
fputs($fp, sprintf("POST %s%s%s HTTP/1.0/n", $url['path'], $url['query'] ? "?" : "", $url['query'])); fputs($fp, "Host: $url[host]/n"); fputs($fp, "Content-type: application/x-www-form-urlencoded/n"); fputs($fp, "Content-length: " . strlen($query) . "/n"); fputs($fp, "Connection: close/n/n");
fputs($fp, "$query/n");
$line = fgets($fp,1024);
if (@!eregi("^HTTP/1/.. 200", $line)) return;
$results = ""; $inheader = 1; while(!feof($fp)) { $line = fgets($fp,1024); if ($inheader && ($line == "/n" || $line == "/r/n")) { $inheader = 0; }elseif (!$inheader) { $results .= $line; } } fclose($fp);
return $results; } $re = sock_post('http://localhost/direct_post/get_post.php?id=1',array('wel'=>'hello')); echo $re; ?>
get_post.php:
<?php echo "post:"; print_r($_POST); echo 'get:'; print_r($_GET); ?>