PHP socket,server,cient:模拟 post
来源:互联网 发布:搜索引擎排名优化 编辑:程序博客网 时间:2024/05/23 01:11
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-------------------
〈?php
/**
* @name test.php
* @date Sun Jan 27 00:49:00 CST 2008
* @copyright 马永占(MyZ)
* @author 马永占(MyZ)
* @link http://blog.csdn.net/mayongzhan/
*/
$xport = “tcp“;
$port = “8001“;
$ip = “127.0.0.1“;
$address = “{$xport}://{$ip}:{$port}“;
$fp = stream_socket_client($address, $errno, $errstr, 1);
if (!$fp) {
echo “$errstr ($errno)〈br /〉/n“;
} else {
fwrite($fp, “/n“);
echo fread($fp, 1024);
fclose($fp);
}
?〉
----------------- streamSocketServer------------------
〈?php
/**
* @name test2.php
* @date Sun Jan 27 00:45:57 CST 2008
* @copyright 马永占(MyZ)
* @author 马永占(MyZ)
* @link http://blog.csdn.net/mayongzhan/
*/
header(“Content-type: text/html;charset=utf-8“);
//设置不超时.服务端当然不能超时
set_time_limit(0);
//得到可用socket
$xportlist = stream_get_transports();
echo “transports:/n“;
foreach ($xportlist as $value) {
echo “{$value}/n“;
}
//定义一些东西
$xport = “tcp“;
$port = “8001“;
$address = “{$xport}://0.0.0.0:{$port}“;
//建立socketserver
if ($xport==’tcp’) {
$socket = stream_socket_server($address, $errno, $errstr);
}
elseif ($xport==’udp’) {
$socket = stream_socket_server($address, $errno, $errstr, STREAM_SERVER_BIND);
}
if (!$socket) {
echo “{$errstr} ({$errno})/n“;
}
else {
echo “listening {$xport}:{$port} .../n“;
if ($xport==’tcp’) {
//许可一个socket连接,-1超时
while ($conn = stream_socket_accept($socket,-1)) {
//得到访问的端口
$peer = stream_socket_get_name($conn,true);
echo “$peer/n“;
fwrite($conn, ’The local time is ’ . date(“Y-m-d H:i:s/n“));
fclose($conn);
}
}
elseif ($xport==’udp’) {
do {
//得到访问的端口
$pkt = stream_socket_recvfrom($socket, 1, 0, $peer);
echo “$peer/n“;
stream_socket_sendto($socket, date(“Y-m-d H:i:s/n“), 0, $peer);
} while ($pkt !== false);
}
//关闭socket
fclose($socket);
}
?〉
------------------ fsockopen(post)-----------------
〈?php
/**
* @name test.php
* @date Sat Jan 26 23:01:23 CST 2008
* @copyright 马永占(MyZ)
* @author 马永占(MyZ)
* @link http://blog.csdn.net/mayongzhan/
*/
/**
* php 发送POST请求
*
* @param string $url 提交到的地址
* @param array $data 要提交的参数 array(’a’=〉’’,’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/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($encoded) . “/n“);
fputs($fp, “Connection: close/n/n“);
fputs($fp, “$encoded/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;
}
echo virtualPost(’http://127.0.0.1/test/test2.php’,array(myz=〉’马永占’));
?〉
以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-------------------
〈?php
/**
* @name test.php
* @date Sun Jan 27 00:49:00 CST 2008
* @copyright 马永占(MyZ)
* @author 马永占(MyZ)
* @link http://blog.csdn.net/mayongzhan/
*/
$xport = “tcp“;
$port = “8001“;
$ip = “127.0.0.1“;
$address = “{$xport}://{$ip}:{$port}“;
$fp = stream_socket_client($address, $errno, $errstr, 1);
if (!$fp) {
echo “$errstr ($errno)〈br /〉/n“;
} else {
fwrite($fp, “/n“);
echo fread($fp, 1024);
fclose($fp);
}
?〉
----------------- streamSocketServer------------------
〈?php
/**
* @name test2.php
* @date Sun Jan 27 00:45:57 CST 2008
* @copyright 马永占(MyZ)
* @author 马永占(MyZ)
* @link http://blog.csdn.net/mayongzhan/
*/
header(“Content-type: text/html;charset=utf-8“);
//设置不超时.服务端当然不能超时
set_time_limit(0);
//得到可用socket
$xportlist = stream_get_transports();
echo “transports:/n“;
foreach ($xportlist as $value) {
echo “{$value}/n“;
}
//定义一些东西
$xport = “tcp“;
$port = “8001“;
$address = “{$xport}://0.0.0.0:{$port}“;
//建立socketserver
if ($xport==’tcp’) {
$socket = stream_socket_server($address, $errno, $errstr);
}
elseif ($xport==’udp’) {
$socket = stream_socket_server($address, $errno, $errstr, STREAM_SERVER_BIND);
}
if (!$socket) {
echo “{$errstr} ({$errno})/n“;
}
else {
echo “listening {$xport}:{$port} .../n“;
if ($xport==’tcp’) {
//许可一个socket连接,-1超时
while ($conn = stream_socket_accept($socket,-1)) {
//得到访问的端口
$peer = stream_socket_get_name($conn,true);
echo “$peer/n“;
fwrite($conn, ’The local time is ’ . date(“Y-m-d H:i:s/n“));
fclose($conn);
}
}
elseif ($xport==’udp’) {
do {
//得到访问的端口
$pkt = stream_socket_recvfrom($socket, 1, 0, $peer);
echo “$peer/n“;
stream_socket_sendto($socket, date(“Y-m-d H:i:s/n“), 0, $peer);
} while ($pkt !== false);
}
//关闭socket
fclose($socket);
}
?〉
------------------ fsockopen(post)-----------------
〈?php
/**
* @name test.php
* @date Sat Jan 26 23:01:23 CST 2008
* @copyright 马永占(MyZ)
* @author 马永占(MyZ)
* @link http://blog.csdn.net/mayongzhan/
*/
/**
* php 发送POST请求
*
* @param string $url 提交到的地址
* @param array $data 要提交的参数 array(’a’=〉’’,’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/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($encoded) . “/n“);
fputs($fp, “Connection: close/n/n“);
fputs($fp, “$encoded/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;
}
echo virtualPost(’http://127.0.0.1/test/test2.php’,array(myz=〉’马永占’));
?〉
- PHP socket,server,cient:模拟 post
- PHP socket,server,cient:模拟 post
- PHP的socket模拟POST
- php socket模拟post(转发)
- php+socket模拟get,post请求
- 用socket模拟php中get,post
- PHP用socket模拟post之fsocketopen
- [php]模拟socket发送GET,POST请求
- php socket模拟POST GET请求 fsockopen版
- php模拟post行为
- PHP模拟post,get
- php模拟POST表单
- php 模拟POST提交
- PHP模拟post登陆
- PHP模拟POST请求
- PHP模拟POST请求
- php模拟post方法
- PHP模拟post请求
- PHP SOCKET 技术研究
- 全都该死
- 文字向上滚动特效,在一行中切换,可以用在新闻或者公告中
- DOJO中国亲情打造-extjs视频教程
- 朱元璋智谋
- PHP socket,server,cient:模拟 post
- JNLP浏览器缓存问题
- php写错误日志
- FormBorderStyle.None 改变窗口大小
- windows 下bat设置IP地址
- PHP: Sockets - Manual
- 重获新生 之 找工作——《轻松Scrum之旅》(3)
- SQL Server 收缩数据库日志文件!
- 用PHP的Socket实现HTTP请求