• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHp + socket编程练习――博客园回复_php

php 搞代码 3年前 (2018-06-21) 121次浏览 已收录 0个评论

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

 
 
<?php
/**
 * 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);
    }
}
 上面是简单的类
 
 
<?php
 
require("./c.php"); // 引入上面的类
$url = "http://www.cnblogs.com/mvc/PostComment/Add.aspx&quot;;
$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);

欢迎大家阅读《PHp + socket编程练习――博客园回复_php》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址