/**
  * Fetch an URL's content. Follows redirects up until the defined 
  * constant REDIRECT_LIMIT times.
  *
  * @param   peer.http.HttpConnection connection
  * @param   array params default array()
  * @param   array headers default array()
  * @return  string
  * @throws  peer.http.UnexpectedResponseException
  */
 public static function get($connection, $params = array(), $headers = array())
 {
     $redirected = 0;
     do {
         try {
             $response = $connection->get($params, $headers);
         } catch (Throwable $e) {
             throw new UnexpectedResponseException($e->getMessage(), -1);
         }
         // Check return code
         switch ($sc = $response->getStatusCode()) {
             case 200:
                 // 200 OK - fetch data
                 $content = '';
                 while (FALSE !== ($buf = $response->readData())) {
                     $content .= $buf;
                 }
                 return $content;
             case 301:
                 // 301 Moved permanently or
             // 301 Moved permanently or
             case 302:
                 // 302 Moved temporarily - redirect
                 if (!($loc = $response->getHeader('Location'))) {
                     throw new UnexpectedResponseException('Redirect status ' . $sc . ', but no location header in ' . $response->toString(), $sc);
                 }
                 if ($redirected >= REDIRECT_LIMIT) {
                     throw new UnexpectedResponseException('Redirection limit (' . REDIRECT_LIMIT . ') reached @ ' . $loc, $sc);
                 }
                 $redirected++;
                 $connection->request = HttpRequestFactory::factory(new URL($loc));
                 break;
             default:
                 // Any other code
                 throw new UnexpectedResponseException('Unexpected answer ' . $response->toString(), $sc);
         }
     } while ($redirected < REDIRECT_LIMIT + 1);
 }
Esempio n. 2
0
<?php

require 'deployment.settings.php';
require_once 'lda.inc.php';
require 'setup.php';
require_once 'lda-cache.class.php';
require_once 'lda-request.class.php';
require_once 'lda-response.class.php';
require_once 'graphs/configgraph.class.php';
require_once 'responses/Response304.class.php';
Logger::configure("puelia.logging.properties");
$HttpRequestFactory = new HttpRequestFactory();
if (function_exists('memcache_connect')) {
    $MemCacheObject = new LinkedDataApiCache();
    $HttpRequestFactory->set_cache($MemCacheObject);
}
$Request = new LinkedDataApiRequest();
header("Access-Control-Allow-Origin: *");
define("CONFIG_PATH", '/api-config');
define("CONFIG_URL", $Request->getBaseAndSubDir() . CONFIG_PATH);
logDebug("Request URI: " . $Request->getUri());
if (rtrim($Request->getPath(), '/') == $Request->getInstallSubDir()) {
    header("Location: " . CONFIG_URL, true, 303);
    exit;
}
if (defined("PUELIA_SERVE_FROM_CACHE") and !$Request->hasNoCacheHeader() and $cachedResponse = LinkedDataApiCache::hasCachedResponse($Request)) {
    logDebug("Found cached response");
    if (isset($Request->ifNoneMatch) && $cachedResponse->eTag == $Request->ifNoneMatch) {
        logDebug("ETag matched, returning 304");
        $Response = new Response304($cachedResponse);
    } else {