Пример #1
0
 /**
  * Proxy list loading and filtering method
  *
  * @access public
  *
  * @throws SuperCurlException
  * 
  * @param string/array $input Input proxy data, could be an array or filename
  * @param integer $window_size Max number of simultaneous connections when testing
  * @param enum(http/socks5) $proxy_type
  * @param string $proxy_test_url URL needed for proxy test requests
  * @param regexp $proxy_valid_regexp Regexp needed to be shure that response hasn`t been modified by proxy
  * 
  * @return bool
  */
 public function load_proxy_list($input, $window_size = 5, $proxy_type = 'http', $proxy_test_url = 'http://google.com', $proxy_valid_regexp = null, $proxy_invalid_regexp = null)
 {
     # writing debug
     self::add_debug_msg("# Start loading proxies");
     # defining proxiess
     if (is_array($input)) {
         $this->array_proxy = $input;
     } else {
         $this->array_proxy = $this->load_from_file($input);
     }
     # checking $window_size var
     if (intval($window_size) < 1 || !is_int($window_size)) {
         throw new SuperCurlException(" (!) Wrong threads amount in load_proxy_list():\t{$window_size}");
     }
     # setting proxy type
     if ($proxy_type == 'socks5') {
         self::add_debug_msg(" * Proxy type set to:\tSOCKS5");
         $this->__set('options', array(CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5));
     } else {
         self::add_debug_msg(" * Proxy type set to:\tHTTP");
     }
     # setting amount
     $this->n_proxy = count($this->array_proxy);
     self::add_debug_msg(" * Loaded proxies:\t{$this->n_proxy}");
     # filtering alive proxies
     if ($this->n_proxy > 0) {
         # removing duplicates
         $n_dup = count($this->array_proxy);
         # by array_values bug was fixed in random array indexes using mt_rand in request()
         $this->array_proxy = array_values(array_unique($this->array_proxy));
         $n_dup -= count($this->array_proxy);
         self::add_debug_msg(" * Removed duplicates:\t{$n_dup}");
         unset($n_dup);
         # updating amount
         $this->n_proxy = count($this->array_proxy);
         self::add_debug_msg(" * Unique proxies:\t{$this->n_proxy}");
         # setting url for testing proxies
         $this->proxy_test_url = $proxy_test_url;
         self::add_debug_msg(" * Proxy test URL:\t{$this->proxy_test_url}");
         # setting regexp for testing proxies
         if (!empty($proxy_valid_regexp)) {
             self::$proxy_valid_regexp = $proxy_valid_regexp;
             self::add_debug_msg(" * Proxy test RegExp:\t" . self::$proxy_valid_regexp);
         }
         if (!empty($proxy_invalid_regexp)) {
             self::$proxy_invalid_regexp = $proxy_invalid_regexp;
             self::add_debug_msg(" * Proxy test NOT HAVE RegExp:\t" . self::$proxy_invalid_regexp);
         }
         $this->filter_alive_proxy($window_size);
     } else {
         throw new SuperCurlException(" (!) Proxies amount < 0 in load_proxy_list():\t{$this->n_proxy}");
     }
     # Setting flag to prevent using SuperCurl without proxies
     $this->use_proxy_list = true;
 }