• php破解防盗链技术


    php破解防盗链技术

    发送http请求

    构造referer信息

    Http协议中,头信息里,有一个重要的选项: Referer

    Referer: 代表网页的来源,即上一页的地址

    具体方法http.class.php

    // 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);
        }
    
        
    
    }
    
    
    
    $http = new Http('http://localhost/apple.jpg'); //本机服务器www目录下的apple.jpg图片
    
    $http->setHeader('Referer: http://localhost');  //构造Referer信息
    $res = $http->get();
    //print_r($res);
    file_put_contents('./aa.png',substr(strstr($res,"
    
    "),4));
    

      

  • 相关阅读:
    1026 Table Tennis (30)
    1029 Median
    1025 PAT Ranking (25)
    1017 Queueing at Bank (25)
    1014 Waiting in Line (30)
    1057 Stack (30)
    1010 Radix (25)
    1008 Elevator (20)
    字母大小写转换
    Nmap的基础知识
  • 原文地址:https://www.cnblogs.com/yxhblogs/p/4741697.html
Copyright © 2020-2023  润新知