zoukankan      html  css  js  c++  java
  • 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));
    

      

  • 相关阅读:
    jquery 使用方法<转载>
    mybatis 使用resultMap实现数据库的操作
    myBatis 实现用户表增删查改操作<方法2 加入接口>(最终版)
    myBatis 实现用户表增删查改操作<方法1 没有使用接口的>(最终版)
    myBatis 实现用户表增操作(复杂型)
    MyBatis 用户表记录数查询
    SpringMVC 返回JSON数据
    springmvc中@PathVariable和@RequestParam的区别(百度收集)
    spring mvc文件上传和下载
    python 网络编程
  • 原文地址:https://www.cnblogs.com/yxhblogs/p/4741697.html
Copyright © 2011-2022 走看看