PHP Classes

File: httpclient.php

Recommend this page to a friend!
  Classes of mertuarez   HTTP client   httpclient.php   Download  
File: httpclient.php
Role: Class source
Content type: text/plain
Description: httpclient.php
Class: HTTP client
Send HTTP requests to Web servers
Author: By
Last change:
Date: 14 years ago
Size: 4,926 bytes
 

Contents

Class file image Download
<?php
class httpclient{
// global $_SERVER;
 
public $port=0; // socket port
 
public $host=''; // host www.example.net
 
public $path=''; // PATH /foo.php
 
public $dirname='';
  public
$filename='';
  public
$scheme='';
  public
$argument=''; // ?foo=bar&foo1=bar
 
public $post_data=''; // foo=bar&foo1=bar
 
public $request_header=''; // header sent to server
 
public $cookie_array=array(); // array('ssid' => 'ssid', 'foo' => 'bar')
 
public $response_data=''; // data returned from server
 
public $response_header=''; // header data from server
 
public $response_body='';
  public
$response_status=0;
 
  function
open($url,$post_data=''){
 
$this->port=(parse_url($url, PHP_URL_PORT) ? parse_url($url, PHP_URL_PORT) : 80); //set port
 
$this->host=parse_url($url, PHP_URL_HOST);
 
$this->path=parse_url($url, PHP_URL_PATH);
 
$this->dirname=dirname($this->path);
 
$this->filename=dirname($this->path);
 
$this->argument=parse_url($url, PHP_URL_QUERY);
 
$this->scheme=parse_url($url, PHP_URL_SCHEME);
 
$this->post_data=$post_data;

 
$this->request_header=($this->post_data=='' ? $this->get_request_header($this->host,$this->path.'?'.$this->argument,$this->cookie_to_text($this->cookie_array)) : $this->post_request_header($this->host,$this->path.'?'.$this->argument,$this->post_data,$this->cookie_to_text($this->cookie_array)));
 
$this->response_data=$this->socket_open($this->host,$this->port,$this->request_header);
 
$this->response_header=$this->get_response_header($this->response_data);
 
$this->cookie_array=$this->get_cookie($this->response_header);
 
$this->response_status=$this->get_status($this->response_header);
 
$this->response_body=$this->get_response_body($this->response_data);
 }

  function
get_request_header($host,$path,$cookie){
 
 
$header='';
 
$header.="GET $path HTTP/1.1";
 
$header.="\r\n";
 
$header.="Host: $host";
 
$header.="\r\n";
 
$header.="User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; sk; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)";
// $header="User-Agent: ".$_SERVER['HTTP_USER_AGENT'];
 
$header.="\r\n";
 
$header.="Accept: */*";
 
$header.="\r\n";
 
$header.="Content-Type: application/x-www-form-urlencoded";
 
$header.="\r\n";
 
$header.="Keep-Alive: 300";
 
$header.="\r\n";
 
$header.="Connection: keep-alive";
 
$header.="\r\n";
 
$header.="Pragma: no-cache";
 
$header.="\r\n";
 
$header.="Cache-Control: no-cache";
 
$header.="\r\n";
 
$header.="Cookie: $cookie";
 
$header.="\r\n";
 
$header.="\r\n";
 
  return
$header;
 }
 
   function
post_request_header($host,$path,$post_data,$cookie){
 
$post_data_length=strlen($post_data);
 
 
$header='';
 
$header.="POST $path HTTP/1.1";
 
$header.="\r\n";
 
$header.="Host: $host";
 
$header.="\r\n";
 
$header.="User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; sk; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)";
// $header="User-Agent: ".$_SERVER['HTTP_USER_AGENT'];
 
$header.="\r\n";
 
$header.="Accept: */*";
 
$header.="\r\n";
 
$header.="Content-Length: $post_data_length";
 
$header.="\r\n";
 
$header.="Content-Type: application/x-www-form-urlencoded";
 
$header.="\r\n";
 
$header.="Keep-Alive: 300";
 
$header.="\r\n";
 
$header.="Connection: keep-alive";
 
$header.="\r\n";
 
$header.="Pragma: no-cache";
 
$header.="\r\n";
 
$header.="Cache-Control: no-cache";
 
$header.="\r\n";
 
$header.="Cookie: $cookie";
 
$header.="\r\n";
 
$header.="\r\n";
 
$header.="$post_data";
 
  return
$header;
 }

  function
cookie_to_text($cookie_array){
 
$cookie_to_text='';
  foreach(
$cookie_array as $key => $value) { $cookie_to_text.=$key.'='.$value;}
  return
$cookie_to_text;
 }

  function
socket_open($host,$port,$header){
 
$socket_open = '';
 
$fp = fsockopen($host, $port);
     
fputs($fp, $header);
      while(!
feof($fp)) {
       
$socket_open .= fgets($fp, 128); // receive the results of the request
       
}
     
fclose($fp); // close the socket connection:
   
return $socket_open;
 }
 
  function
get_response_header($response){
 
$header=explode( "\r\n\r\n" , $response,2);
  return
$header[0];
 }
 
  function
get_cookie($header){
 
$cookie=array();
 
$lines=explode("\r\n",$header);
  foreach(
$lines as $line) {
  
$fields=explode(" ",$line);
  
$columns=explode("=",$fields[1]);
   if (
$fields[0]=='Set-Cookie:') {$cookie[$columns[0]]=$columns[1];}
  }
  return
$cookie;
 }
 
  function
get_status($header){
 
preg_match("/(HTTP[^ ]*) ([^ ]*) ([^\r\n]*)/m", $header,$status);
  return
$status[2];
 }
 
  function
get_response_body($response){
 
$body=explode( "\r\n\r\n" , $response,2);
  return
$body[1];
 }
  function
save($file){
 
$fp=Fopen($file,'w');
  
Fputs($fp,$this->request_body);
  
Fclose($fp);
  }
 
 function
show_data(){
 echo
$this->response_body;
 }
 
}

?>