/** * Proxy list loading and filtering method * * @access public * * @throws AngryCurlException * * @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) { # 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 AngryCurlException(" (!) 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); } $this->filter_alive_proxy($window_size); } else { throw new AngryCurlException(" (!) Proxies amount < 0 in load_proxy_list():\t{$this->n_proxy}"); } # Setting flag to prevent using AngryCurl without proxies $this->use_proxy_list = true; }
/** * Proxy list loading and filtering method * * @access public * * @param string/array $input Input proxy data, could be an array or filename * @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, $proxy_type = 'http', $proxy_test_url = 'http://google.com', $proxy_valid_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); # removing duplicates $n_dup = count($this->array_proxy); $this->array_proxy = array_unique($this->array_proxy); $n_dup -= count($this->array_proxy); self::add_debug_msg("Removed duplicates: {$n_dup}"); unset($n_dup); } # setting amount $this->n_proxy = count($this->array_proxy); # setting proxy type if ($proxy_type == 'socks5') { self::add_debug_msg("Proxy type: SOCKS5"); $this->__set('options', array(CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5)); } else { self::add_debug_msg("Proxy type: HTTP"); } # setting url for testing proxies $this->proxy_test_url = $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: " . self::$proxy_valid_regexp); } # writing debug self::add_debug_msg("Proxy test URL: {$this->proxy_test_url}"); self::add_debug_msg("Loaded proxies: {$this->n_proxy}"); # filtering alive proxies if ($this->n_proxy > 0) { $this->filter_alive_proxy(); } else { self::add_debug_msg("# Testing proxies aborted"); } }