fsockopen
以socket方式打开一个连接
我最常用的是模拟post
这个是小李挖掘的到的...不错
至于要模拟get方式....直接file_get_content就行了.
代码见后面
stream_socket_client, 代码见后面
这个和fsockopenfsockopen一样.以socket方式打开一个连接,只是参数不同
stream_socket_server
建立一个socket server端, 代码见后面
如果是建立的是tcp的server 就用stream_socket_accept进行通讯
如果是建立的是udp的server 就用stream_socket_recvfrom和stream_socket_sendto进行通讯,而且stream_socket_server中需要加个参数stream_server_bind
还有个socket扩展,这个是最基础的建立socket,但是从5.3.0开始就放到pecl中了.
这里就不介绍了.
---------------------------- stream_socket client---------------------------
---------------------------- streamsocketserver---------------------------
---------------------------- fsockopen(post)---------------------------
'''',''b''=>'''');
* @return string
*/
function virtualpost($url, $data) {
$url = parse_url($url);
if (!$url) return url不能解析;
if (!isset($url[''port''])) $url[''port''] = ;
if (!isset($url[''query''])) $url[''query''] = ;
$encoded = ;
while (list($k,$v) = each($data)) {
$encoded .= ($encoded ? & : );
$encoded .= rawurlencode($k).=.rawurlencode($v);
}
//$fp = stream_socket_client($url[''host''].:.($url[''port''] ? $url[''port''] : 80));
$fp = fsockopen($url[''host''], $url[''port''] ? $url[''port''] : 80);
if (!$fp) return 不能打开到$url[host]的连接;
//发送
fputs($fp, sprintf(post %s%s%s http/1.0 , $url[''path''], $url[''query''] ? ? : , $url[''query'']));
fputs($fp, host: $url[host] );
fputs($fp, content-type: application/x-www-form-urlencoded );
fputs($fp, content-length: . strlen($encoded) . );
fputs($fp, connection: close );
fputs($fp, $encoded );
//接受
$line = fgets($fp,1024);
if (!eregi(^http/1.. 200, $line)) return 返回结果错误;
//滤掉空行
$results = ;
$inheader = 1;
while(!feof($fp)) {
$line = fgets($fp,1024);
//把剩余的头信息过滤掉
if ($inheader && ($line == || $line == )) {
$inheader = 0;
}elseif (!$inheader) {
$results .= $line;
}
}
fclose($fp);
return $results;
}
echo virtualpost(''http://127.0.0.1/test/test2.php'',array(myz=>''马永占''));
?>