Rumah > php教程 > php手册 > PHp + socket编程练习回复

PHp + socket编程练习回复

WBOY
Lepaskan: 2016-06-21 08:47:34
asal
1137 orang telah melayarinya

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

 

 

/**

 * 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);



Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan