<?php 
 
 
/*
 
justin was here :D
 
*/
 
 
class HttpFsockopen {
 
 
    protected $url;
 
    protected $path;
 
    protected $host;
 
    protected $query;
 
    protected $post;
 
    protected $port;
 
    protected $headers;
 
    protected $ssl;
 
    protected $method;
 
    protected $timeout;
 
 
    protected static $autoload;
 
    
 
    public function __construct($url, $use_autoload = true){
 
        if(is_null(HttpFsockopen::$autoload) && $use_autoload){
 
            HttpFsockopen::$autoload = true;
 
            spl_autoload_register(array("HttpFsockopen", "load"));
 
        }
 
        $url_array = parse_url($url);
 
        
 
        if(!empty($url_array["scheme"]) && preg_match("#^https|ssl$#i", $url_array["scheme"])){
 
            $this -> ssl = true;
 
        } else {
 
            $this -> ssl = false;
 
        }
 
 
        if(empty($url_array["port"])){
 
            if($this -> ssl){
 
                $this -> port = 443;
 
            } else {
 
                $this -> port = 80;
 
            }
 
        }
 
 
        if(array_key_exists("path", $url_array)){
 
            $this -> path = $url_array["path"];
 
        } else {
 
            $this -> path = false;
 
        }
 
        
 
        if(array_key_exists("query", $url_array)){
 
            $this -> query = $url_array["query"];
 
        } else {
 
            $this -> query = false;
 
        }
 
        
 
        $this -> host = $url_array["host"];
 
        $this -> method = "GET";
 
        $this -> timeout = 15;
 
    }
 
 
    public static function load($class){
 
        $file = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 
 
            preg_replace("#[_]+#", DIRECTORY_SEPARATOR , $class) . ".php";
 
        if(file_exists($file))
 
        include_once $file ;
 
    }
 
 
    public function setQueryData($data){
 
        if(is_array($data)){
 
            $data = http_build_query($data);
 
        }
 
        $this -> query = $data;
 
        return $this;
 
    }
 
    
 
    public function setPostData($data){
 
        if(is_array($data)){
 
            $data = http_build_query($data);
 
        }
 
        $this -> post = $data;
 
        $this -> method = "POST";
 
        $this -> setHeaders("Content-Type", "application/x-www-form-urlencoded");
 
        return $this;
 
    }
 
 
    public function setMethod($method){
 
        $previous_method = $this -> method;
 
        if(preg_match("#^[a-z]+$#i", $method)){
 
            $this -> method = strtoupper($method);
 
        }
 
        if($this -> method == "POST" && $previous_method != "POST"){
 
            $this -> setHeaders("Content-Type", "application/x-www-form-urlencoded");
 
        }
 
        if($this -> method != "POST" && $previous_method == "POST"){
 
            $this -> setHeaders("Content-Type", null);
 
        }
 
        return $this;
 
    }
 
 
    public function setTimeout($timeout){
 
        $this -> timeout = $timeout;
 
        return $this;
 
    }
 
 
    public function setPort($port){
 
        $this -> port = $port;
 
        return $this;
 
    }
 
 
    public function setHeaders($key, $value = null){
 
        if(is_array($key)){
 
            foreach($key as $key => $value){
 
                if(is_null($value)){
 
                    unset($this -> headers[$key]);
 
                } else {
 
                    $this -> headers[$key] = $value;
 
                }
 
            }
 
        } else {
 
            if(is_null($value)){
 
                unset($this -> headers[$key]);
 
            } else {
 
                $this -> headers[$key] = $value;
 
            }
 
         }
 
        return $this;
 
    }
 
    
 
    public function setUserAgent($user_agent){
 
        return $this -> setHeaders("User-Agent", $user_agent);
 
    }
 
    
 
    public function exec(){
 
        $socket = fsockopen(($this -> ssl ? "ssl://" : "") . $this -> host, $this -> port, $errno, $errstr,
 
            $this -> timeout);
 
        $contents = "";
 
        
 
        if($socket){
 
            $http  = $this -> method . " ". (strlen($this -> path) ? $this -> path : "/") .
 
                (strlen($this -> query)>0 ? "?" . $this -> query : "")
 
                ." HTTP/1.1\r\n";
 
            $http .= "Host: ".$this -> host."\r\n";
 
            foreach($this -> headers as $key => $value){
 
                $http .= $key. ": ".$value."\r\n";
 
            }
 
            $http .= "Content-length: " . strlen($this -> post) . "\r\n";
 
            $http .= "Connection: close\r\n\r\n";
 
            if(!is_null($this -> post))
 
            $http .= $this -> post . "\r\n\r\n";
 
            fwrite($socket, $http);    
 
            while (!feof($socket)) {
 
                $contents .= fgetc($socket);
 
            }
 
            fclose($socket);
 
        }
 
        
 
        return new HttpFsockopen_Response($socket, $contents, $errno, $errstr);
 
    }
 
 
}
 
 |