Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


  • used for parsing information from remote resourse using user-predefined amount of simultaneous connections over proxies-list.

Basic information


  • PHP 5 >= 5.1.0
  • RollingCurl
  • cURL

Use cases:

  • multi-threaded parsing over proxy
  • overcoming simple parsing protection by using User-Agent header and proxy-lists
  • proxy list checking
  • validating proxies' response

Main features

  • loading proxy-list from file or array
  • removing duplicates
  • filtering alive proxies
  • checking if proxy given response content is correct
  • loading useragent-list from file or array
  • changing proxy/useragent "on the fly"
  • preventing direct connections without any proxy/useragent if such options are set
  • multi-thread connections
  • callback functions
  • working with chains of requests
  • web-console mode
  • logging


Preferred environment configuration

  • PHP as Apache module
  • safe_mode Off
  • open_basedir is NOT set
  • PHP cURL installed
  • gzip Off

Basic usage


function my_callback($response, $info, $request)
    // callback function here

// sending callback function name as param
$AC = new AngryCurl('my_callback');
// initializing console-style output

// Importing proxy and useragent lists, setting regexp, proxy type and target url for proxy check
// You may also import proxy from an array as simple as $AC->load_proxy_list($proxy array);
    // path to proxy-list file
    // optional: number of threads
    // optional: proxy type
    // optional: target url to check
    // optional: target regexp to check
// You may also import useragents from an array as simple as $AC->load_useragent_list($proxy array);

while(/* */)
    $url = /**/;
    // adding URL to queue
    // you may also use 
    // $AC->post($url, $post_data = null, $headers = null, $options = null);
    // $AC->get($url, $headers = null, $options = null);
    // $AC->request($url, $method = "GET", $post_data = null, $headers = null, $options = null);
    // as well

// setting amount of threads and starting connections

// if console_mode is off


cURL options

You may also pass cURL options for each url before adding to queue like here:

// Define HTTP headers (CURLOPT_HTTPHEADER) if needed, or just set to NULL
$headers = array('Content-type: text/plain', 'Content-length: 100');
// Define cURL options (will be passed through curl_setopt_array) if needed, or just set to NULL
$options = array(CURLOPT_HEADER => true, CURLOPT_NOBODY => true);
// Define post-data array to send in case of POST method, or just set to NULL
$post_data = array('param' => 'value');

// Add request
$AC->get($url, $headers, $options);
// or
$AC->post($url, $post_data, $headers, $options) ;
// or
$AC->request($url, $method = "GET", $post_data, $headers, $options);

// ATTENTION: temporary "on-the-fly" proxy/useragents lists are not
// working with AngryCurlRequest. Keep it in mind if you will use code below
// as alternative to written above.

$request = new AngryCurlRequest($url);
// $url, $method, $post_data, $headers, $options - public properties of AngryCurlRequest
$request->options = array(CURLOPT_HEADER => true, CURLOPT_NOBODY => true);

Because this class is kind of extension of RollingCurl class you may use any constructions RollingCurl has. For other information read here:


  • chains of requests
  • stop on error_limit exceed
  • better documentation and examples


You may join this class discussion here: Any questions, change requests and other things you may send to my email written in class comments.

Thank you for reading.

  • naive


AngryCurl - Anonymized Rolling Curl class, used for parsing information from remote resourse using user-predefined amount of simultaneous connections over proxies-list.



No releases published


You can’t perform that action at this time.