>  기사  >  php教程  >  PHp + socket编程练习回复

PHp + socket编程练习回复

WBOY
WBOY원래의
2016-06-21 08:47:341126검색

因为也是学习的路上,先画出思路,代码和看别人的学习的,最后是根据的思路完成的,可能比较简单,后期在去完善和更改

 

 

/**

 * php+socket 编程 发送HTTP请求

 * @version  c.php

 * 模拟博客园评论

 */

interface Proto{

    // 连接url

    public function conn($url);

    // 发送get请求

    public function get();

    // 发送post请求

    public function post($body);

    //关闭连接

    public function close();

}

class Http implements Proto{

    protected $response = '';

    protected $fh=null;

    protected $errno = -1;

    protected $errorstr = '';

 

    protected $line = array();

    protected $header = array();

    protected $body = array();

    public $url = array();

 

    public function __construct($url){

        $this->conn($url);

        $this->setHeader('Host: ' . $this->url['host']);

    }

    // 请求行

    protected function setLine($method){

        $this->line[0] = $method . ' ' . $this->url['path'] .  ' ' . 'HTTP/1.1';

    }

    // 头信息

    public function setHeader($headerline){

        $this->header[] = $headerline;

    }

    // 主体信息

    protected function setBody($body){

                $this->body[] = http_build_query($body);

    }

    // 连接url

    public function conn($url){

        $this->url = parse_url($url);

        if(!isset($this->url['port'])){

            $this->url['port'] = 80;

        }

        $this->fh = fsockopen($this->url['host'],$this->url['port'],$this->errno,$this->errorstr,3);

    }

    // 构建get请求

    public function get(){

        $this->setLine('GET');

        $this->request();

        return $this->response;

    }

    // 发送post请求

    public function post($bo){

        $this->setLine('POST');

                // content-type

                $this->setHeader("Content-type: application/x-www-form-urlencoded");

 

                $this->setBody($bo);

                // content-length

                $this->setHeader("Content-length: " .strlen($this->body[0]));

                $this->request();

                return $this->response;

    }

    public function request(){

        $req = array_merge($this->line,$this->header,array(''),$this->body,array(''));

        //print_r($req);die;

        $req = implode(PHP_EOL,$req); // PHP_EOL 换行

//      echo $req;die;

        fwrite($this->fh,$req);

        while(!feof($this->fh)){

            $this->response .= fread($this->fh,1024);

        }

        $this->close();

    }

    public function close(){

            fclose($this->fh);

    }

}

 上面是简单的类

 

 

 

require("./c.php"); // 引入上面的类

$url = "http://www.cnblogs.com/mvc/PostComment/Add.aspx";

$http = new Http($url);

$http->setHeader("Cookie:xxxx");

$http->setHeader("Referer: http://www.cnblogs.com/geek12/p/4024793.html");

$http->setHeader("User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0");

 

$msg =array(

"blogApp"=>"geek12",

"body"=>"来自robot",

"parentCommentId"=>0,

"postId"=>4024793);

 

$http->post($msg);



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:PHP与EXCEL PHPExcel다음 기사:php snoopy采集类介绍