zoukankan      html  css  js  c++  java
  • 04 http协议模拟登陆发帖

    <?php
    
    
    
    require('./http.class.php');
    
    
    $http = new Http('http://home.verycd.com/cp.php?ac=pm&op=send&touid=0&pmid=0');
    
    
    $http->setHeader('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
    $http->setHeader('Accept-Encoding: gzip, deflate');
    $http->setHeader('Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3');
    $http->setHeader('Connection: keep-alive');
    
    $http->setHeader('Cookie: Hm_lvt_c7849bb40e146a37d411700cb7696e46=1371132935,1371551596,1371552570; CNZZDATA1479=cnzz_eid%3D2070887527-1371133011-http%253A%252F%252Fhome.verycd.com%26ntime%3D1371559611%26cnzz_a%3D27%26retime%3D1371559611556%26sin%3Dhttp%253A%252F%252Fwww.verycd.com%252Fi%252F17907141%252F%26ltime%3D1371559611556%26rtime%3D1; __utma=248211998.1671623420.1371133015.1371557486.1371559612.4; __utmz=248211998.1371552579.2.2.utmcsr=verycd.com|utmccn=(referral)|utmcmd=referral|utmcct=/; Hm_lpvt_c7849bb40e146a37d411700cb7696e46=1371554752; post_action=repost; BAIDU_CLB_REFER=http%3A%2F%2Fcwebmail.mail.163.com%2Fjs5%2Fread%2Freadhtml.jsp%3Fssid%3DI7zQECYCxLDKHPlnXYxQm9sNe5EPh1drYPvN26nZekk%253d%26mid%3D45%3A1tbiLRFAhFEFoLvtCAAAsS%26color%3D003399%26preventSetRead%3Don%26font%3D15; uchome_loginuser=http%E5%8D%8F%E8%AE%AE; uchome__refer=%2Fspace.php%3Fdo%3Dpm%26filter%3Dnewpm; __utmc=248211998; sid=9a48b201fb4d176a7188ef2a3560789651eb4766; member_id=17822047; member_name=http%E5%8D%8F%E8%AE%AE; mgroupId=93; pass_hash=e75f942862a5e927a2faffd2d2d582c9; rememberme=false; uchome_auth=4128oUJWyonkCXZvxM4sDRjcugSmt3L0r197Pq%2BPdf8fcLJsUiNZKBXjG0hYuPZSRK3XEs2FuRn1pH2cEFBNc1H0Im7x5A; uchome_sendmail=1; uchome_checkpm=1; __utmb=248211998.1.10.1371559612; dcm=1');
    
    $http->setHeader('Referer: http://home.verycd.com/cp.php?ac=pm');
    $http->setHeader('User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0');
    
    
    $msg = array(
    'formhash'=>'4f23e777',
    'message'=>'我不是在灌水,请放行',
    'pmsubmit'=>'true',
    'pmsubmit_btn'=>'发送',
    'refer'=>'http://home.verycd.com/space.php?do=pm&filter=privatepm',
    'username'=>'http接收'
    );
    
    
    file_put_contents('./res.html',$http->post($msg));
    echo 'ok';
    <?php
    
    
    
    /*
    PHP+socket编程 发送HTTP请求
    
    要求能 模拟下载,注册,登陆,批量发帖
    */
    
    
    // http请求类的接口
    interface Proto {
        // 连接url
        function conn($url);
    
        //发送get查询
        function get();
    
        // 发送post查询
        function post();
    
        // 关闭连接
        function close();
    }
    
    
    
    class Http implements Proto {
    
        const CRLF  = "
    ";
    
        protected $errno = -1;
        protected $errstr = '';
        protected $response = '';
    
        protected $url = null;
        protected $version = 'HTTP/1.1';
        protected $fh = null;
        
        protected $line = array();
        protected $header = array();
        protected $body = 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'] . '?' .$this->url['query'] . ' '. $this->version;
        }
    
        // 此方法负责写头信息
        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;
            }
    
            // 判断query
            if(!isset($this->url['query'])) {
                $this->url['query'] = '';
            }
    
            $this->fh = fsockopen($this->url['host'],$this->url['port'],$this->errno,$this->errstr,3);
        }
    
        //构造get请求的数据
        public function get() {
            $this->setLine('GET');
            $this->request();
            return $this->response;
        }
    
        // 构造post查询的数据
        public function post($body = array()) {      
            $this->setLine('POST');
    
            // 设计content-type
            $this->setHeader('Content-type: application/x-www-form-urlencoded');
            
            // 设计主体信息,比GET不一样的地方
            $this->setBody($body);
    
    
            // 计算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);
    
            $req = implode(self::CRLF,$req); 
            //echo $req; exit;
    
            fwrite($this->fh,$req);
            
            while(!feof($this->fh)) {
                $this->response .= fread($this->fh,1024);
            }
    
            $this->close(); // 关闭连接
        }
    
    
        // 关闭连接
        public function close() {
            fclose($this->fh);
        }
    
        
    
    }
    
    
    
    
  • 相关阅读:
    msp430入门学习21--TA
    msp430入门学习20
    msp430入门学习17
    msp430入门学习16
    msp430入门学习15--时钟
    msp430入门学习14
    msp430入门学习13
    msp430入门学习12
    msp430入门学习11
    msp430入门学习10
  • 原文地址:https://www.cnblogs.com/hgj123/p/4331017.html
Copyright © 2011-2022 走看看