public function testValidatesMd5() { $plugin = new Md5ValidatorPlugin(); $request = RequestFactory::getInstance()->create('GET', 'http://www.test.com/'); $request->getEventDispatcher()->addSubscriber($plugin); $body = 'abc'; $hash = md5($body); $response = new Response(200, array('Content-MD5' => $hash, 'Content-Length' => 3), 'abc'); $request->dispatch('request.complete', array('response' => $response)); // Try again with no Content-MD5 $response->removeHeader('Content-MD5'); $request->dispatch('request.complete', array('response' => $response)); }
/** * {@inheritdoc} */ public function cache($key, Response $response, $ttl = null) { if ($ttl === null) { $ttl = $this->defaultTtl; } if ($ttl) { $response->setHeader('X-Guzzle-Cache', "key={$key}, ttl={$ttl}"); // Remove excluded headers from the response (see RFC 2616:13.5.1) foreach ($this->excludeResponseHeaders as $header) { $response->removeHeader($header); } // Add a Date header to the response if none is set (for validation) if (!$response->getDate()) { $response->setHeader('Date', Utils::getHttpDate('now')); } $this->cache->save($key, array($response->getStatusCode(), $response->getHeaders()->getAll(), $response->getBody(true)), $ttl); } }
public function cache($key, Response $response, $ttl = null) { if ($ttl === null) { $ttl = $this->defaultTtl; } $ttl += $response->getMaxAge(); if ($ttl) { $response->setHeader('X-Guzzle-Cache', "key={$key}; ttl={$ttl}"); // Remove excluded headers from the response (see RFC 2616:13.5.1) foreach ($this->excludeResponseHeaders as $header) { $response->removeHeader($header); } // Add a Date header to the response if none is set (for validation) if (!$response->getDate()) { $response->setHeader('Date', gmdate(ClientInterface::HTTP_DATE)); } $this->cache->save($key, array($response->getStatusCode(), $response->getHeaders()->toArray(), $response->getBody(true)), $ttl); } }
/** * Save data to the cache adapter * * @param string $key The cache key * @param Response $response The response to cache * @param int $lifetime Amount of seconds to cache * * @return int Returns the lifetime of the cached data */ protected function saveCache($key, Response $response, $lifetime = null) { $lifetime = $lifetime ?: $this->defaultLifetime; // If the data is cacheable, then save it to the cache adapter if ($lifetime) { // Remove excluded headers from the response (see RFC 2616:13.5.1) foreach ($this->excludeResponseHeaders as $header) { $response->removeHeader($header); } // Add a Date header to the response if none is set (for validation) if (!$response->getDate()) { $response->setHeader('Date', Utils::getHttpDate('now')); } $data = array('c' => $response->getStatusCode(), 'h' => $response->getHeaders(), 'b' => $response->getBody(true)); if ($this->serialize) { $data = serialize($data); } $this->getCacheAdapter()->save($key, $data, $lifetime); } return $lifetime; }
/** * @covers Guzzle\Http\Message\Response::canValidate */ public function testDeterminesIfItCanValidate() { $response = new Response(200); $this->assertFalse($response->canValidate()); $response->setHeader('ETag', '123'); $this->assertTrue($response->canValidate()); $response->removeHeader('ETag'); $this->assertFalse($response->canValidate()); $response->setHeader('Last-Modified', '123'); $this->assertTrue($response->canValidate()); }