public function start()
 {
     $content = parent::start();
     // false means cURL failed
     if ($content === false) {
         throw new Exception('cURL error: ' . $this->getErrorMessage());
     }
     // anything else than status code 2xx is most likely bad
     $iHttpCode = $this->getHttpCode();
     if ($iHttpCode < 200 || $iHttpCode > 299) {
         throw new Exception('Server error: ' . HttpHeader::getHttpCodeString($iHttpCode));
     }
     return $content;
 }
 /**
  * {@inheritdoc}
  */
 public function remove($key)
 {
     // Assume that $key is an ID.
     if (!array_key_exists($key, $this->values)) {
         // Test if key was a header name.
         $key = HttpHeader::generateId($key);
         if (!array_key_exists($key, $this->values)) {
             return;
         }
     }
     unset($this->values[$key]);
 }
 public function refreshResponseHeaders()
 {
     // clear old headers
     self::$aResponseHeaders = array();
     // use the apache function, if possible
     if (function_exists('apache_response_headers')) {
         self::$aResponseHeaders = apache_response_headers();
     } else {
         $aHeaderList = headers_list();
         foreach ($aHeaderList as $sHeader) {
             $aHeader = explode(':', $sHeader);
             self::$aResponseHeaders[$aHeader[0]] = trim($aHeader[1]);
         }
     }
 }
Example #4
0
 /**
  * Redirects
  *
  * @param string $url
  */
 public function redirect($url)
 {
     HttpHeader::redirect($url);
 }
 private function displayImage(File $oImageFile)
 {
     $oHeader = new HttpHeader();
     if (!$oHeader->isModifiedSince($oImageFile->lastModified())) {
         $oHeader->setResponseCode(304);
     } else {
         $oHeader->setResponse('Content-Type', 'image/png');
         $oImageFile->readStdOut();
     }
 }
 public function run()
 {
     try {
         // load config
         $oProxyConfig = FileConfig::getInstance('xmlproxy.cfg');
         $oCommonConfig = FileConfig::getInstance('common.cfg');
         // load config vars
         $iCacheLifetime = $oCommonConfig->getInteger('cache.lifetime', 600);
         $sCacheDir = $oCommonConfig->getString('cache.dir', 'cache');
         $iDownloaderTimeout = $oCommonConfig->getInteger('downloader.timeout', 10);
         $bXMLHttpRequestOnly = $oProxyConfig->getBoolean('proxy.check_header', true);
         $oHeader = new HttpHeader();
         // response to XMLHttpRequest only
         if ($bXMLHttpRequestOnly && !$oHeader->isXMLHttpRequest()) {
             $oHeader->setResponseCode(204);
             return;
         }
         // get profile URL
         $sXmlUrl = $this->getProfileUrl();
         // init cache
         $oXmlCache = new Cache($sCacheDir, $iCacheLifetime, 'xml');
         $oXmlFile = $oXmlCache->getFile($sXmlUrl);
         // do we have a cached version of the xml document?
         if (!$oXmlFile->isCached()) {
             try {
                 // initialize the downloader
                 $oProfileLoader = new HttpProfileLoader($sXmlUrl, SteamProfileApp::AGENT, 'Ajax');
                 $oProfileLoader->setTimeout($iDownloaderTimeout);
                 $oProfileLoader->setTrimExtra(true);
                 $oProfileLoader->setFilterCtlChars(true);
                 $sXml = '';
                 try {
                     // try to download the XML file
                     $sXml = $oProfileLoader->start();
                 } catch (Exception $e) {
                     // didn't work, close cURL handle
                     $oProfileLoader->close();
                     throw $e;
                 }
                 // close cURL handle
                 $oProfileLoader->close();
                 // save document to cache
                 $oXmlFile->writeString($sXml);
                 // clear stat cache to ensure that the rest of the
                 // script will notice the file modification
                 clearstatcache();
             } catch (Exception $e) {
                 // downloading failed, but maybe we can redirect to the old file
                 if (!$oXmlFile->exists()) {
                     // no, we can't
                     throw $e;
                 }
             }
         }
         // use client cache, if possible
         if (!$oHeader->isModifiedSince($oXmlFile->lastModified())) {
             $oHeader->setResponseCode(304);
             return;
         } else {
             $oHeader->setResponse('Content-Type', 'application/xml');
             $oXmlFile->readStdOut();
         }
     } catch (Exception $e) {
         $oHeader = new HttpHeader();
         $oHeader->setResponse('Content-Type', 'application/xml');
         echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
         echo '<response><error><![CDATA[' . $e->getMessage() . ']]></error></response>';
     }
 }