/** * 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); }
<?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 {