zoukankan      html  css  js  c++  java
  • PHP socket类

    没事的时候自己封装了一个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
    ";
            }else{
                if(!empty($this->param)){
                    $header = "GET $this->url?$this->param HTTP/1.1
    ";
                }else{
                    $header = "GET $this->url HTTP/1.1
    ";
                }
            }
            $header .= "Content-Length:" . strlen($this->param) . "
    ";
            $header .= "Host:$this->host:$this->port
    ";
            $header .= "Content-Type:application/x-www-form-urlencode
    ";
            $header .= "Connection:close
    
    ";
            if($this->method == 'POST'){
                $header .= "$this->param
    
    ";
            }
            if(!empty($this->header)){
                foreach ($this->header as $key=>$val){
                    $tmep = urlencode($val);
                    $header .= "$key:$temp
    ";
                }
            }
            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, "
    
    ");
            $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;


  • 相关阅读:
    C++11新特性
    Qt操作xml
    指针和引用的区别
    QT软件主题切换
    常见的临时变量的生成场景
    QQuickWidget+QML设置背景透明
    idea maven Could not transfer artifact
    Java项目启动时执行指定方法的几种方式
    解决bootstrap-table在切换分页后再次查询报错404问题
    bootstrap:表单必填项*标识,及提交前校验
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5066559.html
Copyright © 2011-2022 走看看