[limb-svn] r6779 - 3.x/trunk/limb/web_agent/src/request

svn at limb-project.com svn at limb-project.com
Fri Feb 8 15:35:41 MSK 2008


Author: cmz
Date: 2008-02-08 15:35:40 +0300 (Fri, 08 Feb 2008)
New Revision: 6779
URL: http://fisheye.limb-project.com/changelog/limb/?cs=6779

Added:
   3.x/trunk/limb/web_agent/src/request/lmbNativeWebAgentRequest.class.php
Modified:
   3.x/trunk/limb/web_agent/src/request/lmbAbstractWebAgentRequest.class.php
   3.x/trunk/limb/web_agent/src/request/lmbSocketWebAgentRequest.class.php
Log:
-- added a default charset for requests
-- added lmbNativeWebAgentRequest 

Modified: 3.x/trunk/limb/web_agent/src/request/lmbAbstractWebAgentRequest.class.php
===================================================================
--- 3.x/trunk/limb/web_agent/src/request/lmbAbstractWebAgentRequest.class.php	2008-02-08 10:02:49 UTC (rev 6778)
+++ 3.x/trunk/limb/web_agent/src/request/lmbAbstractWebAgentRequest.class.php	2008-02-08 12:35:40 UTC (rev 6779)
@@ -14,7 +14,7 @@
  * Abstract class of webagent request
  *
  * @package web_agent
- * @version $Id: lmbAbstractWebAgentRequest.class.php 40 2007-10-04 15:52:39Z CatMan $
+ * @version $Id$
  */
 abstract class lmbAbstractWebAgentRequest
 {
@@ -22,7 +22,8 @@
   protected $user_agent = '';
   protected $accept_charset = '';
   protected $headers;
-  protected $content = '';
+  protected $content = '';
+  protected $default_charset = 'utf-8';
 
   function __construct()
   {
@@ -33,6 +34,11 @@
   function getCookies()
   {
   	return $this->cookies;
+  }
+  
+  function getDefaultCharset()
+  {
+    return $this->default_charset;
   }
 
   function setUserAgent($user_agent)
@@ -53,6 +59,11 @@
   function setContent($content)
   {
     $this->content = $content;
+  }
+  
+  function setDefaultCharset($charset)
+  {
+    $this->default_charset = $charset;
   }
 
   function clean()


Property changes on: 3.x/trunk/limb/web_agent/src/request/lmbAbstractWebAgentRequest.class.php
___________________________________________________________________
Name: svn:keywords
   + Id

Added: 3.x/trunk/limb/web_agent/src/request/lmbNativeWebAgentRequest.class.php
===================================================================
--- 3.x/trunk/limb/web_agent/src/request/lmbNativeWebAgentRequest.class.php	                        (rev 0)
+++ 3.x/trunk/limb/web_agent/src/request/lmbNativeWebAgentRequest.class.php	2008-02-08 12:35:40 UTC (rev 6779)
@@ -0,0 +1,207 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html
+ */
+
+lmb_require(dirname(__FILE__).'/lmbAbstractWebAgentRequest.class.php');
+lmb_require(dirname(__FILE__).'/../lmbWebServerResponse.class.php');
+lmb_require(dirname(__FILE__).'/../lmbWebAgentCookie.class.php');
+lmb_require(dirname(__FILE__).'/../lmbWebAgentHeaders.class.php');
+lmb_require(dirname(__FILE__).'/../lmbWebServerCookiesCollection.class.php');
+
+/**
+ * Web request through file_get_contents
+ *
+ * @package web_agent
+ * @version $Id$
+ */
+class lmbNativeWebAgentRequest extends lmbAbstractWebAgentRequest {
+  protected $request_data = null;
+  protected $request_headers = null;
+  protected $url = null;
+  protected $response_data = false;
+  protected $response_headers_raw = '';
+  protected $response_headers = null;
+  
+  protected function prepareRequestData($url, $method)
+  {
+    $this->request_data = array('http' => array());
+    $this->setRequestMethod($method);
+    $this->setRequestUrl($url);
+    $this->initRequestData();
+    $this->prepareCookies();
+    $this->prepareUserAgent();
+    $this->prepareAcceptCharset();
+    $this->prepareHeaders();
+    $this->prepareContent();
+    $this->assembleRequestData();
+  }
+
+  protected function setRequestMethod($method)
+  {
+    $this->request_data['http']['method'] = $method;
+  }
+
+  protected function setRequestUrl($url)
+  {
+    $this->url = $url;
+  }
+
+  protected function initRequestData()
+  {
+  	$this->request_headers = new lmbWebAgentHeaders();
+    $this->addHeader('connection', 'close');
+  }
+
+  protected function addHeader($name, $value)
+  {
+  	$this->request_headers->set($name, $value);
+  }
+
+  protected function prepareCookies()
+  {
+    if($this->cookies->hasCookies())
+      $this->addHeader('Cookie', $this->cookies->export());
+  }
+
+  protected function prepareUserAgent()
+  {
+    if($this->user_agent)
+      $this->request_data['http']['user_agent'] = $this->user_agent;
+  }
+
+  protected function prepareAcceptCharset()
+  {
+    if($this->accept_charset)
+      $this->addHeader('Accept-Charset', $this->accept_charset);
+  }
+
+  protected function prepareHeaders()
+  {
+    $this->headers->copyTo($this->request_headers);
+  }
+
+  protected function prepareContent()
+  {
+    if($this->content)
+      $this->request_data['http']['content'] = $this->content;
+  }
+
+  protected function assembleRequestData()
+  {
+    $this->request_data['http']['header'] = $this->request_headers->exportHeaders();
+  }
+
+  function doRequest($url, $method = 'GET')
+  {
+    $this->prepareRequestData($url, $method);
+    //echo '<pre>', $this->request_data, '</pre>';
+    if($this->readData())
+    {
+      $headers =  $this->readHeaders();
+      $status = $this->readStatus();
+      $mediatype = $this->readMediaType();
+      $charset = $this->readCharset();
+      $cookies = $this->readCookies();
+      $content = $this->readContent();
+      /*ini_set('xdebug.var_display_max_depth', 4 );
+      var_dump(
+        $status,
+        $mediatype,
+        $charset,
+        $cookies,
+        $headers
+       );
+      echo $content;*/
+      return new lmbWebServerResponse(
+        $content,
+        $status,
+        $mediatype,
+        $charset,
+        $cookies,
+        $headers
+      );
+    }
+    else
+    {
+      return new lmbWebServerResponse('', 400, '', '', new lmbWebServerCookiesCollection(), new lmbWebAgentHeaders());
+    }
+  }
+
+  protected function readData()
+  {
+    $context  = stream_context_create($this->request_data);
+    $this->response_data = file_get_contents($this->url, null, $context);
+    if($this->response_data === false)
+      return false;
+    
+    $this->response_headers_raw = $http_response_header;
+    return true;
+  }
+  
+  protected function readHeaders()
+  {
+    $this->response_headers = new lmbWebAgentHeaders();
+    foreach($this->response_headers_raw as $header)
+    {
+      $this->response_headers->parse($header);
+    }
+    return $this->response_headers;
+  }
+
+  protected function readStatus()
+  {
+    $first = $this->response_headers->getFirst();
+    if(!$first) return 400;
+    if(!preg_match('#^HTTP/\S+[ ]+([0-9]+)#', $first, $a))
+      return false;
+    return $a[1];
+  }
+
+  protected function getContentTypeHeader()
+  {
+    return strtolower($this->response_headers->get('content-type'));
+  }
+
+  protected function readMediaType()
+  {
+    $content_type = $this->getContentTypeHeader();
+    if(!$content_type)
+      return 'text/html';
+    return substr($content_type, 0, strpos($content_type, ';'));
+  }
+
+  protected function readCharset()
+  {
+    $content_type = $this->getContentTypeHeader();
+    if(!$content_type)
+      return $this->getDefaultCharset();
+
+    $charset_pos = strpos($content_type, 'charset=');
+    if($charset_pos === false)
+      return $this->getDefaultCharset();
+      
+    return substr($content_type, $charset_pos + 8);
+  }
+
+  protected function readCookies()
+  {
+    $cookies = new lmbWebServerCookiesCollection();
+    $n = 0;
+    while(($value = $this->response_headers->get('set-cookie', $n ++)) !== null)
+    {
+    	$cookies->add(new lmbWebServerCookie($value));
+    }
+    return $cookies;
+  }
+
+  protected function readContent()
+  {
+    return $this->response_data;
+  }
+}
+?>
\ No newline at end of file


Property changes on: 3.x/trunk/limb/web_agent/src/request/lmbNativeWebAgentRequest.class.php
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: 3.x/trunk/limb/web_agent/src/request/lmbSocketWebAgentRequest.class.php
===================================================================
--- 3.x/trunk/limb/web_agent/src/request/lmbSocketWebAgentRequest.class.php	2008-02-08 10:02:49 UTC (rev 6778)
+++ 3.x/trunk/limb/web_agent/src/request/lmbSocketWebAgentRequest.class.php	2008-02-08 12:35:40 UTC (rev 6779)
@@ -17,7 +17,7 @@
  * Web request with sockets
  *
  * @package web_agent
- * @version $Id: lmbSocketWebAgentRequest.class.php 89 2007-10-12 15:28:50Z CatMan $
+ * @version $Id$
  */
 class lmbSocketWebAgentRequest extends lmbAbstractWebAgentRequest {
   protected $request_data = '';
@@ -209,14 +209,19 @@
     return substr($content_type, 0, strpos($content_type, ';'));
   }
 
-  protected function readCharset()
-  {
-    $content_type = $this->getContentTypeHeader();
-    if(!$content_type)
-      return 'utf-8';
-    return substr($content_type, strpos($content_type, 'charset=') + 8);
-  }
-
+  protected function readCharset()
+  {
+    $content_type = $this->getContentTypeHeader();
+    if(!$content_type)
+      return $this->getDefaultCharset();
+
+    $charset_pos = strpos($content_type, 'charset=');
+    if($charset_pos === false)
+      return $this->getDefaultCharset();
+      
+    return substr($content_type, $charset_pos + 8);
+  }
+
   protected function readCookies()
   {
     $cookies = new lmbWebServerCookiesCollection();


Property changes on: 3.x/trunk/limb/web_agent/src/request/lmbSocketWebAgentRequest.class.php
___________________________________________________________________
Name: svn:keywords
   + Id



More information about the limb-svn mailing list