05.05.2015 11:04:39
Также этот подход подойдет и для скачивания обычный файлов (или страниц) из обычного интернета.
Нам понадобится сервер с установленным TOR и php с curl.

Для начала, предположим, что сервер с php у нас есть и он на Centos.

  1. Устанавливаем TOR:

    yum -y install tor

  2. Запускаем:

    service tor start

  3. Вот пример простого скрипта, позволяющего скачать файл использую ТОР как прокси:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_PROXY, '127.0.0.1:9050');
      curl_setopt($ch, CURLOPT_URL, "http://domen.ru/");
      curl_setopt($ch, CURLOPT_PROXYTYPE, 7);
      
      $result = curl_exec($ch);
    
      if(!$result)
      {
        echo curl_error($ch);
      }
      else
      {
        echo $result;
      }
    
      curl_close($ch);

  4. А вот уже более интересный, на мой взгляд, скрипт. Он перебирает страницы на сайте и копирует все картинки.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
      error_reporting(E_ALL);
      ini_set('display_errors', 'On');
      
      class soMain
      {
        protected $_oCURL                = NULL;
        protected $_sSite                = NULL;
        protected $_sURL                = NULL;
    
        function __construct($sSite, $sURL) 
        {
          $this->_oCURL = curl_init();
          $this->_sSite = $sSite;
          $this->_sURL = $sURL;
    
          curl_setopt($this->_oCURL, CURLOPT_RETURNTRANSFER, true);
          curl_setopt($this->_oCURL, CURLOPT_PROXY, '127.0.0.1:9050');
          curl_setopt($this->_oCURL, CURLOPT_PROXYTYPE, 7);
        }
    
    
        protected function _getPageContent($sURL)
        {
          curl_setopt($this->_oCURL, CURLOPT_URL, $sURL);
          $Res = curl_exec($this->_oCURL);
    
          if($Res === false)
          {
            echo ('<b style="color :red">Ошибка curl:</b> ' . curl_error($this->_oCURL)) .'<br />';
          }
          else
          {
            return $Res;
          }
        }
    
    
        protected function _parseImg($sText)
        {
          //$sTag = '<a href=';
          $sTag = '<img src=';
          
          $sPattern  = "|";
            $sPattern .= $sTag.'".*?"';
            $sPattern .= '".*?"';
            //$sPattern .= "|si";
          $sPattern .= "|";
    
          preg_match_all($sPattern, $sText, $aMatches, PREG_SET_ORDER);
    
          $aRet = array();
          foreach($aMatches as $aMatche)
          {
            $aRet[] = str_replace('"', '', str_replace($sTag.'"', '', $aMatche[0]));
          }
    
          return $aRet;
        }
        
        protected function _downloadImg($aImages)
        {
          foreach($aImages as $sImage)
          {
            $sFileUrl = $this->_sSite.$sImage;
            
            $Res = $this->_getPageContent($sFileUrl);
            
            $sFN = str_replace('/', '_', $sImage);
    
            file_put_contents('tmp/'.$sFN, $Res);
          }
        }
    
        public function go()
        {
          ob_start();
    
          $sPageContent = $this->_getPageContent($this->_sURL);
          $aImages = $this->_parseImg($sPageContent);
          
          $this->_downloadImg($aImages);
    ?>
    
    <?
          return ob_get_clean();
        }
      }
    
    
    //----------------------------------------------
      $sURL = 'http://domen.ru/';  
      
      for ($i=1; $i < 10; $i++)
      {
        $sURL = $sSite.'/page/'.$i.'.html'; 
        $oMain = new soMain($sSite, $sURL);
        echo $oMain->go();
      }

HH


Тэги: Web, PHP, linux

Яндекс.Метрика