PHP 16
Httpreq.inc Guest on 7th July 2020 01:59:43 PM
  1. <?php
  2. class SF9_HTTPRequest
  3. {
  4.         var $_fp; // HTTP socket
  5.         var $_url; // full URL
  6.         var $_host; // HTTP host
  7.         var $_protocol; // protocol (HTTP/HTTPS)
  8.         var $_uri; // request URI
  9.         var $_port; // port
  10.  
  11.         // constructor
  12.         public function __construct($url)
  13.         {
  14.                 $this->_url = $url;
  15.                 $this->_scan_url();
  16.         }
  17.  
  18.         // scan url
  19.         function _scan_url()
  20.         {
  21.                 $req = $this->_url;
  22.  
  23.                 $pos = strpos($req, '://');
  24.                 $this->_protocol = strtolower(substr($req, 0, $pos));
  25.  
  26.                 $req = substr($req, $pos+3);
  27.                 $pos = strpos($req, '/');
  28.                 if ($pos === false)
  29.                 {
  30.                         $pos = strlen($req);
  31.                 }
  32.                 $host = substr($req, 0, $pos);
  33.  
  34.                 if (strpos($host, ':') !== false)
  35.                 {
  36.                         list($this->_host, $this->_port) = explode(':', $host);
  37.                 }
  38.                 else
  39.                 {
  40.                         $this->_host = $host;
  41.                         $this->_port = ($this->_protocol == 'https') ? 443 : 80;
  42.                 }
  43.  
  44.                 $this->_uri = substr($req, $pos);
  45.                 if ($this->_uri == '')
  46.                 {
  47.                         $this->_uri = '/';
  48.                 }
  49.         }
  50.  
  51.         // download URL to string
  52.         function DownloadToString()
  53.         {
  54.                 $crlf = "\r\n";
  55.  
  56.                 // generate request
  57.                 $req = 'GET '.$this->_uri.' HTTP/1.0'.$crlf.'Host: '.$this->_host.$crlf.$crlf;
  58.  
  59.                 // fetch
  60.                 $this->_fp = fsockopen(($this->_protocol == 'https' ? 'ssl://' : '') . $this->_host, $this->_port);
  61.                 if ($this->_fp)
  62.                 {
  63.                         fwrite($this->_fp, $req);
  64.                         $response = '';
  65.                         while (is_resource($this->_fp) && $this->_fp && !feof($this->_fp))
  66.                         {
  67.                                 $response .= fread($this->_fp, 1024);
  68.                         }
  69.                         fclose($this->_fp);
  70.  
  71.                         // split header and body
  72.                         $pos = strpos($response, $crlf . $crlf);
  73.                         if($pos === false) return($response);
  74.                         $header = substr($response, 0, $pos);
  75.                         $body = substr($response, $pos + 2 * strlen($crlf));
  76.  
  77.                         // parse headers
  78.                         $headers = array();
  79.                         $lines = explode($crlf, $header);
  80.                         foreach($lines as $line)
  81.                         if (($pos = strpos($line, ':')) !== false)
  82.                         {
  83.                                 $headers[strtolower(trim(substr($line, 0, $pos)))] = trim(substr($line, $pos+1));
  84.                         }
  85.  
  86.                         // redirection?
  87.                         if (isset($headers['location']))
  88.                         {
  89.                                 $http = new SF9_HTTPRequest($headers['location']);
  90.                                 return($http->DownloadToString($http));
  91.                         }
  92.                         else
  93.                         {
  94.                                 return($body);
  95.                         }
  96.                 }
  97.         }
  98. }
  99. ?>

Paste is for source code and general debugging text.

Login or Register to edit, delete and keep track of your pastes and more.

Raw Paste

Login or Register to edit or fork this paste. It's free.