没事的时候自己封装了一个socket类

功能非常easy和curl功能是一样的

class socketClass{
private $host;
private $url;
private $error_no = 0;
public $error_str = '';
private $port = 80;
private $timeout = 5;
private $method;
private $param;
private $fp;
private $content = '';
private $header = array();
public function __construct($host, $port, $url, $param, $method='GET', $timeout=5) {
$this->host = $host;
$this->port = $port;
$this->url = $url;
$this->timeout = $timeout;
$this->method = $method;
if(is_array($param)){
$this->param = http_build_query($param);
}else{
$this->param = $param;
}
}
private function connect(){
$this->fp = fsockopen($this->host, $this->port, $this->error_no, $this->error_str, $this->timeout);
if(!$this->fp){
$this->error_str = 'socket connect failed';
return false;
}
return true;
}
private function send(){
$this->fp = '';
if(!$this->connect()){
$this->error_str = 'connect socket failed';
return false;
}
if($this->method == 'POST'){
$header = "POST $this->url HTTP/1.1\r\n";
}else{
if(!empty($this->param)){
$header = "GET $this->url?$this->param HTTP/1.1\r\n";
}else{
$header = "GET $this->url HTTP/1.1\r\n";
}
}
$header .= "Content-Length:" . strlen($this->param) . "\r\n";
$header .= "Host:$this->host:$this->port\r\n";
$header .= "Content-Type:application/x-www-form-urlencode\r\n";
$header .= "Connection:close\r\n\r\n";
if($this->method == 'POST'){
$header .= "$this->param\r\n\r\n";
}
if(!empty($this->header)){
foreach ($this->header as $key=>$val){
$tmep = urlencode($val);
 $header .= "$key:$temp\r\n";
}
}
fwrite($this->fp, $header);
while(!feof($this->fp)){
$this->content .= fread($this->fp, 1024);
}
fclose($this->fp);
return true;
}
public function getContent(){
if(!$this->send()){
return false;
}
$pos = strpos($this->content, "\r\n\r\n");
$this->content = substr($this->content, $pos);
return $this->content;
}
public function setHeader($key, $val){
$this->header[$key] = $val;
}
public function getErrorStr(){
return $this->error_str;
}
}
$host = 'localhost';
$port = 81;
$url = 'http://localhost/phpdemo/php/socket_accept.php';
$param = array('username'=>'beggar', 'passwd'=>'20060400');
$method = 'GET';
$timeout = 10;
$http = new socketClass($host, $port, $url, $param, $method, $timeout);
$http->setHeader('referer', $url);
$http->setHeader('Accept', '*/*');
$header = $http->getContent();
echo $header;

PHP socket类的更多相关文章

  1. ServerSocket与Socket类

    ServerSocket与Socket类 TCP套接字协议: TCP最主要的特征就是能够建立长时间的连接,而且能够保证数据安全的送达,但是速度比较慢.使用TCP进行连接的时候会有三次握手,之后才建立起 ...

  2. Socket类 以及 ServerSocket类 讲解

    Socket类 套接字是网络连接的端点,套接字使应用可以从网络中读取数据,可以向网络中写入数据.不同计算机上的两个应用程序可以通过连接发送或接收字节流,以此达到相互通信的目的. 为了从一个应用程序向另 ...

  3. socket系列之客户端socket——Socket类

    假设TCP套接字服务器端已经建立好并正在监听客户端的连接了,那么客户端就可以通过Socket类来发起连接.客户端发起一个连接请求后,就被动地在等待服务器的响应.这个类同样位于java.net包中,包含 ...

  4. Socket 类

    构造函数       名称 说明 Socket(AddressFamily, SocketType, ProtocolType) 新实例初始化 Socket 类使用指定的地址族. 套接字类型和协议. ...

  5. java网络编程ServerSocket类 和Socket类的常用构造方法及其方法

    Socket类Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号.Socket(String host, int po ...

  6. 详解 ServerSocket与Socket类

    (请观看本人博文 -- <详解 网络编程>) 目录 ServerSocket与Socket ServerSocket 类: Socket类: ServerSocket与Socket 首先, ...

  7. 【Android编程】Java利用Socket类编写Metasploit安卓载荷辅助模块

    /作者:Kali_MG1937 CSDN博客:ALDYS4 QQ:3496925334/ 注意!此文章被作者标记到 黑历史 专栏中,这意味着本篇文章可能存在 质量低下,流水账文,笔法低质 的问题 为了 ...

  8. 编写Java程序,使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的场景(用户充当客户端,QQ 小冰充当服务端)

    查看本章节 查看作业目录 需求说明: 小冰是微软公司研发的人工智能机器人,被腾讯公司加入 QQ 群后,立即受到千万网友的喜爱.现在使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的 ...

  9. 解决Docker运行命令时提示"Got permission denied while trying to connect to the Docker daemon socket"类情况

    Docker安装命令: 解决Docker运行命令时提示"Got permission denied while trying to connect to the Docker daemon ...

随机推荐

  1. UVA 529 Addition Chains(迭代搜索)

      Addition Chains  An addition chain for n is an integer sequence  with the following four propertie ...

  2. LaTeX新人教程,30分钟从全然陌生到基本入门

    1.LaTeX软件的安装和使用  方法A(自助):在MikTeX的官网下载免费的MikTeX编译包并安装.下载WinEdt(收费)或TexMaker(免费)等编辑界面软件并安装.  方法B(打包):在 ...

  3. Swift - 导航条(UINavigationBar)的使用

    与导航控制器(UINavigationController)同时实现导航条和页面切换功能不同. 导航条(UINavgationBar)可以单独使用,添加至任何的UIView中.UINavigation ...

  4. PostgreSQL的备份与还原

    导出: cmd,然后一直cd,到PostgreSQL的bin下面,用其pg_dump程序: pg_dump -h localhost -U ivms864013 ivms864013 > G:\ ...

  5. java中遍历MAP,嵌套map的几种方法

    java中遍历MAP的几种方法 Map<String,String> map=new HashMap<String,String>();    map.put("us ...

  6. find . / -newer oldest_file.txt ! -newer newest_file.txt

    如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项. 它的一般形式为: $ find . / -newer oldest_file.txt ! -newer newe ...

  7. C++中的函数模板

    我们在定义函数时,可以通过定义函数模板,来简化一些功能相同而数据类型不同的函数的定义和调用过程. C++中的函数模板 对于类的声明来说,也有同样的问题.有时,有两个或多个类,其功能是相同的,仅仅是数据 ...

  8. 辛星PHP教程之yii和ci教程已经写完,望与朋友们交流

     记得有个朋友给我说,你写的PHP框架是不是过于少了.我感觉仅仅有一个thinkphp确实不好,于是就又写了下yii和ci的教程,事实上我之前是研究过这两个框架的,因此写起来也还算得心应手吧.估计接下 ...

  9. 玩转Windows服务系列——Debug、Release版本的注册和卸载,及其原理

    原文:玩转Windows服务系列——Debug.Release版本的注册和卸载,及其原理 Windows服务Debug版本 注册 Services.exe -regserver 卸载 Services ...

  10. 破解phpjm.net加密,解密程序,全部公布

    原文:破解phpjm.net加密,解密程序,全部公布 2014-05-23更新: 很久没人找我解密了,看来这加密已过时,现公布我这边最新的解密工具. 若有解不出的可联系qq: 267014855 (不 ...