Viewing file: class.http_client.php (13.9 KB) -rw-rw-r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
//include ("class.htmlparser.php");
class http_Client {
/** * return conten in array. one line by element * @access public * @var array */ public $parser=array(); /** * the url * @access public * @var string */ public $url; /** enviar is the string to send to url in POST or GET * * @access public * @var string */ public $enviar ; /** * number of seconds to timeout conection * @access public * @var int */ public $timeout = 300; /** * the result in one variable. * @access public * @var string */ public $result ; /** * Curl handler * @access public * @var resource */ public $curl_handler ; /** * Contain last error message if error occured * @access public * @var string */ public $error_msg; /** * Contain last error number if error occured * @access public * @var string */ public $error; /** * file for cookies * @access public * @var string */ public $cookies_file ;
/** * set debug to true in order to get usefull output * @access private * @var string */ var $debug = false;
/** * Curl_HTTP_Client constructor * @param boolean debug * @access public */
public function __construct ($url,$enviar,$proxy="") { //$this->debug = $debug; $this->init(); $this->url=$url; $this->enviar=$enviar; $this->set_user_agent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); if (!$this->cookies_file)$this->cookies_file="cookiex.txt"; if (!$this->timeout)$this->timeout=20; $this->store_cookies($this->cookies_file); $this->set_proxy($proxy); if (is_array($enviar)){ //echo "se envia por post!".chr(10); $this->send_post_data(); }else{ $this->fetch_url(); } } /** * Init Curl session * @access public */ function init() { // initialize curl handle $this->curl_handler = curl_init();
//set various options
//set error in case http return code bigger than 300 curl_setopt($this->curl_handler, CURLOPT_FAILONERROR, true);
// allow redirects curl_setopt($this->curl_handler, CURLOPT_FOLLOWLOCATION, true); // use gzip if possible curl_setopt($this->curl_handler,CURLOPT_ENCODING , 'gzip, deflate');
// do not veryfy ssl // this is important for windows // as well for being able to access pages with non valid cert curl_setopt($this->curl_handler, CURLOPT_SSL_VERIFYPEER, 0); }
/** * Set username/pass for basic http auth * @param string user * @param string pass * @access public */ function set_credentials($username,$password) { curl_setopt($this->curl_handler, CURLOPT_USERPWD, "$username:$password"); }
/** * Set referrer * @param string referrer url * @access public */ function set_referrer($referrer_url) { curl_setopt($this->curl_handler, CURLOPT_REFERER, $referrer_url); }
/** * Set client's useragent * @param string user agent * @access public */ function set_user_agent($useragent) { curl_setopt($this->curl_handler, CURLOPT_USERAGENT, $useragent); }
/** * Set to receive output headers in all output functions * @param boolean true to include all response headers with output, false otherwise * @access public */ function include_response_headers($value) { curl_setopt($this->curl_handler, CURLOPT_HEADER, $value); }
/** * Set proxy to use for each curl request * @param string proxy * @access public */ function set_proxy($proxy) { curl_setopt($this->curl_handler, CURLOPT_PROXY, $proxy); }
/** * Send post data to target URL * return data returned from url or false if error occured * @param string url * @param mixed post data (assoc array ie. $foo['post_var_name'] = $value or as string like var=val1&var2=val2) * @param string ip address to bind (default null) * @param int timeout in sec for complete curl operation (default 10) * @return string data * @access public */ function send_post_data() { //set various curl options first
// set url to post to curl_setopt($this->curl_handler, CURLOPT_URL,$this->url);
// return into a variable rather than displaying it curl_setopt($this->curl_handler, CURLOPT_RETURNTRANSFER,true);
//bind to specific ip address if it is sent trough arguments
//set curl function timeout to $timeout curl_setopt($this->curl_handler, CURLOPT_TIMEOUT, $this->timeout);
//set method to post curl_setopt($this->curl_handler, CURLOPT_POST, true); //generate post string $post_array = array(); if(is_array($this->enviar)) { foreach($this->enviar as $key=>$value) { $post_array[] = urlencode($key) . "=" . urlencode($value); }
$post_string = implode("&",$post_array);
if($this->debug) { echo "Url: $url\nPost String: $post_string\n"; } } else { $post_string = $postdata; }
// set post string curl_setopt($this->curl_handler, CURLOPT_POSTFIELDS, $post_string);
//and finally send curl request $this->result = curl_exec($this->curl_handler);
if(curl_errno($this->curl_handler)) { if($this->debug) { echo "Error Occured in Curl\n"; echo "Error number: " .curl_errno($this->curl_handler) ."\n"; echo "Error message: " .curl_error($this->curl_handler)."\n"; } $this->error=curl_errno($this->curl_handler); $this->error_msg=curl_error($this->curl_handler);
return false; } else { return $result; } }
/** * fetch data from target URL * return data returned from url or false if error occured * @param string url * @param string ip address to bind (default null) * @param int timeout in sec for complete curl operation (default 5) * @return string data * @access public */ function fetch_url() { // set url to post to curl_setopt($this->curl_handler, CURLOPT_URL,$this->url."?".$this->enviar);
//set method to get curl_setopt($this->curl_handler, CURLOPT_HTTPGET,true);
// return into a variable rather than displaying it curl_setopt($this->curl_handler, CURLOPT_RETURNTRANSFER,true);
//bind to specific ip address if it is sent trough arguments
//set curl function timeout to $timeout curl_setopt($this->curl_handler, CURLOPT_TIMEOUT, $this->timeout);
//and finally send curl request $this->result = curl_exec($this->curl_handler);
if(curl_errno($this->curl_handler)) { if($this->debug) { echo "Error Occured in Curl\n"; echo "Error number: " .curl_errno($this->curl_handler) ."\n"; echo "Error message: " .curl_error($this->curl_handler)."\n"; } $this->error=curl_errno($this->curl_handler); $this->error_msg=curl_error($this->curl_handler);
return false; } else { return $this->result; } }
/** * Fetch data from target URL * and store it directly to file * @param string url * @param resource value stream resource(ie. fopen) * @param string ip address to bind (default null) * @param int timeout in sec for complete curl operation (default 5) * @return boolean true on success false othervise * @access public */ function fetch_into_file($url, $fp, $ip=null) { // set url to post to curl_setopt($this->curl_handler, CURLOPT_URL,$url);
//set method to get curl_setopt($this->curl_handler, CURLOPT_HTTPGET, true);
// store data into file rather than displaying it curl_setopt($this->curl_handler, CURLOPT_FILE, $fp);
//bind to specific ip address if it is sent trough arguments if($ip) { if($this->debug) { echo "Binding to ip $ip\n"; } curl_setopt($this->curl_handler, CURLOPT_INTERFACE, $ip); }
//set curl function timeout to $timeout curl_setopt($this->curl_handler, CURLOPT_TIMEOUT, $this->timeout);
//and finally send curl request $result = curl_exec($this->curl_handler);
if(curl_errno($this->curl_handler)) { if($this->debug) { echo "Error Occured in Curl\n"; echo "Error number: " .curl_errno($this->curl_handler) ."\n"; echo "Error message: " .curl_error($this->curl_handler)."\n"; }
return false; } else { return true; } }
/** * Send multipart post data to the target URL * return data returned from url or false if error occured * (contribution by vule nikolic, [email protected]) * @param string url * @param array assoc post data array ie. $foo['post_var_name'] = $value * @param array assoc $file_field_array, contains file_field name = value - path pairs * @param string ip address to bind (default null) * @param int timeout in sec for complete curl operation (default 30 sec) * @return string data * @access public */ function send_multipart_post_data($url, $postdata, $file_field_array=array(), $ip=null) { //set various curl options first
// set url to post to curl_setopt($this->curl_handler, CURLOPT_URL, $url);
// return into a variable rather than displaying it curl_setopt($this->curl_handler, CURLOPT_RETURNTRANSFER, true);
//bind to specific ip address if it is sent trough arguments if($ip) { if($this->debug) { echo "Binding to ip $ip\n"; } curl_setopt($this->curl_handler,CURLOPT_INTERFACE,$ip); }
//set curl function timeout to $timeout curl_setopt($this->curl_handler, CURLOPT_TIMEOUT, $this->timeout);
//set method to post curl_setopt($this->curl_handler, CURLOPT_POST, true);
// disable Expect header // hack to make it working $headers = array("Expect: "); curl_setopt($this->curl_handler, CURLOPT_HTTPHEADER, $headers);
// initialize result post array $result_post = array();
//generate post string $post_array = array(); $post_string_array = array(); if(!is_array($postdata)) { return false; }
foreach($postdata as $key=>$value) { $post_array[$key] = $value; $post_string_array[] = urlencode($key)."=".urlencode($value); }
$post_string = implode("&",$post_string_array);
if($this->debug) { echo "Post String: $post_string\n"; }
// set post string //curl_setopt($this->curl_handler, CURLOPT_POSTFIELDS, $post_string);
// set multipart form data - file array field-value pairs if(!empty($file_field_array)) { foreach($file_field_array as $var_name => $var_value) { if(strpos(PHP_OS, "WIN") !== false) $var_value = str_replace("/", "\\", $var_value); // win hack $file_field_array[$var_name] = "@".$var_value; } }
// set post data $result_post = array_merge($post_array, $file_field_array); curl_setopt($this->curl_handler, CURLOPT_POSTFIELDS, $result_post);
//and finally send curl request $result = curl_exec($this->curl_handler);
if(curl_errno($this->curl_handler)) { if($this->debug) { echo "Error Occured in Curl\n"; echo "Error number: " .curl_errno($this->curl_handler) ."\n"; echo "Error message: " .curl_error($this->curl_handler)."\n"; }
return false; } else { return $result; } }
/** * Set file location where cookie data will be stored and send on each new request * @param string absolute path to cookie file (must be in writable dir) * @access public */ function store_cookies($cookies_file) { // use cookies on each request (cookies stored in $cookie_file) curl_setopt ($this->curl_handler, CURLOPT_COOKIEJAR, $cookies_file); curl_setopt ($this->curl_handler, CURLOPT_COOKIEFILE, $cookies_file); } /** * Set custom cookie * @param string cookie * @access public */ function set_cookie($cookie) { curl_setopt ($this->curl_handler, CURLOPT_COOKIE, $cookie); } function destroy_cookie() { //echo "borrando cookies ".$this->cookies_file; unlink ($this->cookies_file); }
/** * Get last URL info * usefull when original url was redirected to other location * @access public * @return string url */ function get_effective_url() { return curl_getinfo($this->curl_handler, CURLINFO_EFFECTIVE_URL); }
/** * Get http response code * @access public * @return int */ function get_http_response_code() { return curl_getinfo($this->curl_handler, CURLINFO_HTTP_CODE); }
/** * Return last error message and error number * @return string error msg * @access public */ function get_error_msg() { $err = "Error number: " .curl_errno($this->curl_handler) ."\n"; $err .="Error message: " .curl_error($this->curl_handler)."\n";
return $err; } /** * Close curl session and free resource * Usually no need to call this function directly * in case you do you have to call init() to recreate curl * @access public */ function close() { //close curl session and free up resources curl_close($this->curl_handler); } }
/** * @version $Id$ * @package dinke.net * @copyright © 2005 Dinke.net * @author Dragan Dinic <[email protected]>
require_once("curl_http_client.php");
$curl = &new Curl_HTTP_Client();
//pretend to be IE6 on windows $useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"; $curl->set_user_agent($useragent);
//uncomment next two lines if you want to manage cookies //$cookies_file = "/tmp/cookies.txt"; //$curl->store_cookies($cookies_file);
//Uncomment next line if you want to set credentials //$curl->set_credentials($username, $password);
//Uncomment next line if you want to set specific referrer //$curl->set_referrer("http://my.referrer.url");
//if you want to send some post data //form post data array like this one $post_data = array('login' => 'pera', 'password' => 'joe', 'other_foo_field' => 'foo_value'); //and send request to http://www.foo.com/login.php. Result page is stored in $html_data string $html_data = $curl->send_post_data("http://www.foo.com/login.php", $post_data);
//You can also fetch data from somewhere using get method! //Fetch html from url $html_data = $curl->fetch_url("http://www.foo.com/foobar.php?login=pera&password=joe&other_foo_field=foo_value");
//if you have more than one IP on your server, //you can also bind to specific IP address like ... //$bind_ip = "192.168.0.1"; //$curl->fetch_url("http://www.foo.com/login.php", $bind_ip); //$html_data = $curl->send_post_data("http://www.foo.com/login.php", $post_data, $bind_ip); */ ?>
|