<?
/************************************************************
GET and POSTS REQUESTS TO HTTP SERVER
CREATED BY: Tiago Serafim
DATE : 04/05/2003
EMAIL : TIAGO at HEX dot COM dot BR
************************************************************/
/*
Date Update
*/
class cHTTP {
var $referer;
var $postStr;
var $retStr;
var $theData;
var $theCookies;
function clsHTTP(){
}
function setReferer($sRef){
$this->referer = $sRef;
}
function addField($sName, $sValue){
$this->postStr .= $sName . "=" . $this->HTMLEncode($sValue) . "&";
}
function clearFields(){
$this->postStr = "";
}
function checkCookies(){
$cookies = explode("Set-Cookie:", $this->theData );
$i = 0;
if ( count($cookies)-1 > 0 ) {
while(list($foo, $theCookie) = each($cookies)) {
if (! ($i == 0) ) {
@list($theCookie, $foo) = explode(";", $theCookie);
list($cookieName, $cookieValue) = explode("=", $theCookie);
@list($cookieValue, $foo) = explode("\r\n", $cookieValue);
$this->setCookies(trim($cookieName), trim($cookieValue));
}
$i++;
}
}
}
function setCookies($sName, $sValue){
$total = count(explode($sName, $this->theCookies));
if ( $total > 1 ) {
list($foo, $cValue) = explode($sName, $this->theCookies);
list($cValue, $foo) = explode(";", $cValue);
$this->theCookies = str_replace($sName . $cValue . ";", "", $this->theCookies);
}
$this->theCookies .= $sName . "=" . $this->HTMLEncode($sValue) . ";";
}
function getCookies($sName){
list($foo, $cValue) = explode($sName, $this->theCookies);
list($cValue, $foo) = explode(";", $cValue);
return substr($cValue, 1);
}
function clearCookies(){
$this->theCookies = "";
}
function getContent(){
list($header, $foo) = explode("\r\n\r\n", $this->theData);
list($foo, $content) = explode($header, $this->theData);
return substr($content, 4);
}
function getHeaders(){
list($header, $foo) = explode("\r\n\r\n", $this->theData);
list($foo, $content) = explode($header, $this->theData);
return $header;
}
function getHeader($sName){
list($foo, $part1) = explode($sName . ":", $this->theData);
list($sVal, $foo) = explode("\r\n", $part1);
return trim($sVal);
}
function postPage($sURL){
$sInfo = $this->parseRequest($sURL);
$request = $sInfo['request'];
$host = $sInfo['host'];
$port = $sInfo['port'];
$this->postStr = substr($this->postStr, 0, -1); //retira a ultima &
$httpHeader = "POST $request HTTP/1.0\r\n";
$httpHeader .= "Host: $host\r\n";
$httpHeader .= "Connection: Close\r\n";
$httpHeader .= "User-Agent: cHTTP/0.1b (incompatible; M$ sucks; Open Source Rulez)\r\n";
$httpHeader .= "Content-type: application/x-www-form-urlencoded\r\n";
$httpHeader .= "Content-length: " . strlen($this->postStr) . "\r\n";
$httpHeader .= "Referer: " . $this->referer . "\r\n";
$httpHeader .= "Cookie: " . $this->theCookies . "\r\n";
$httpHeader .= "\r\n";
$httpHeader .= $this->postStr;
$httpHeader .= "\r\n\r\n";
$this->theData = $this->downloadData($host, $port, $httpHeader); // envia os dados para o servidor
$this->checkCookies();
}
function getPage($sURL){
$sInfo = $this->parseRequest($sURL);
$request = $sInfo['request'];
$host = $sInfo['host'];
$port = $sInfo['port'];
$httpHeader = "GET $request HTTP/1.0\r\n";
$httpHeader .= "Host: $host\r\n";
$httpHeader .= "Connection: Close\r\n";
$httpHeader .= "User-Agent: cHTTP/0.1b (incompatible; M$ sucks; Open Source Rulez)\r\n";
$httpHeader .= "Referer: " . $this->referer . "\r\n";
$httpHeader .= "Cookie: " . substr($this->theCookies, 0, -1) . "\r\n";
$httpHeader .= "\r\n\r\n";
$this->theData = $this->downloadData($host, $port, $httpHeader); // envia os dados para o servidor
}
function parseRequest($sURL){
list($protocol, $sURL) = explode('://', $sURL); // separa o resto
list($host, $foo) = explode('/', $sURL); // pega o host
list($foo, $request) = explode($host, $sURL); // pega o request
@list($host, $port) = explode(':', $host); // pega a porta
if ( strlen($request) == 0 ) $request = "/";
if ( strlen($port) == 0 ) $port = "80";
$sInfo = Array();
$sInfo["host"] = $host;
$sInfo["port"] = $port;
$sInfo["protocol"] = $protocol;
$sInfo["request"] = $request;
return $sInfo;
}
/* changed 06/30/2003 */
function HTMLEncode($sHTML){
$sHTML = urlencode($sHTML);
return $sHTML;
}
function downloadData($host, $port, $httpHeader){
$fp = fsockopen($host, $port);
$retStr = "";
if ( $fp ) {
fwrite($fp, $httpHeader);
while(! feof($fp)) {
$retStr .= fread($fp, 1024);
}
fclose($fp);
}
return $retStr;
}
} // class
|