Ejemplo n.º 1
0
 public function testPercentEncode()
 {
     $this->assertEquals('foobar', UriResolver::percentEncode('foobar'));
     $this->assertEquals('http%3A%2F%2Fgoogle.de', UriResolver::percentEncode('http://google.de'));
     $this->assertEquals('http%3A%2F%2Fgoogle.de', UriResolver::percentEncode('http%3A%2F%2Fgoogle.de'));
     $this->assertEquals('http%253A%252F%252Fgoogle.de', UriResolver::percentEncode('http%3A%2F%2Fgoogle.de', false));
 }
Ejemplo n.º 2
0
Archivo: Http.php Proyecto: seytar/psx
 public function resolve(Uri $uri, Document $source, RefResolver $resolver)
 {
     if (!$uri->isAbsolute()) {
         $uri = UriResolver::resolve($source->getBaseUri(), $uri);
     }
     $request = new GetRequest($uri, array('Accept' => 'application/schema+json'));
     $response = $this->httpClient->request($request);
     if ($response->getStatusCode() == 200) {
         $schema = (string) $response->getBody();
         $data = Json::decode($schema);
         $document = new Document($data, $resolver, null, $uri);
         return $document;
     } else {
         throw new RuntimeException('Could not load external schema ' . $uri->toString() . ' received ' . $response->getStatusCode());
     }
 }
Ejemplo n.º 3
0
 /**
  * Converts an raw http request into an PSX\Http\Request object
  *
  * @param string $content
  * @return \PSX\Http\Request
  */
 public function parse($content)
 {
     $content = $this->normalize($content);
     list($method, $path, $scheme) = $this->getStatus($content);
     // resolve uri path
     if ($this->baseUrl !== null) {
         $path = UriResolver::resolve($this->baseUrl, new Uri($path));
     } else {
         $path = new Uri($path);
     }
     $request = new Request($path, $method);
     $request->setProtocolVersion($scheme);
     list($header, $body) = $this->splitMessage($content);
     $this->headerToArray($request, $header);
     $request->setBody(new StringStream($body));
     return $request;
 }
Ejemplo n.º 4
0
Archivo: Http.php Proyecto: seytar/psx
 /**
  * Sends the request through the given handler and returns the response
  *
  * @param \PSX\Http\Request $request
  * @param \PSX\Http\Options $options
  * @param integer $count
  * @return \PSX\Http\Response
  */
 public function request(Request $request, Options $options = null, $count = 0)
 {
     if (!$request->getUri()->isAbsolute()) {
         throw new InvalidArgumentException('Request url must be absolute');
     }
     // set cookie headers
     if ($this->cookieStore !== null) {
         $cookies = $this->cookieStore->load($request->getUri()->getHost());
         if (!empty($cookies)) {
             $kv = array();
             foreach ($cookies as $cookie) {
                 $path = ltrim($cookie->getPath(), '/');
                 if ($cookie->getExpires() !== null && $cookie->getExpires()->getTimestamp() < time()) {
                     $this->cookieStore->remove($request->getUri()->getHost(), $cookie);
                 } elseif ($cookie->getPath() !== null && substr($request->getUri()->getPath(), 0, strlen($path)) != $path) {
                     // path does not fit
                 } else {
                     $kv[] = $cookie->getName() . '=' . $cookie->getValue();
                 }
             }
             $request->addHeader('Cookie', implode('; ', $kv));
         }
     }
     // set content length
     $body = $request->getBody();
     if ($body !== null && $request->hasHeader('Transfer-Encoding') != 'chunked' && !in_array($request->getMethod(), array('HEAD', 'GET'))) {
         $size = $body->getSize();
         if ($size !== false) {
             $request->setHeader('Content-Length', $size);
         }
     }
     // set default options
     if ($options === null) {
         $options = new Options();
     }
     // make request
     $response = $this->handler->request($request, $options);
     // store cookies
     if ($this->cookieStore !== null) {
         $cookies = $response->getHeaderLines('Set-Cookie');
         foreach ($cookies as $rawCookie) {
             try {
                 $cookie = new Cookie($rawCookie);
                 $domain = $cookie->getDomain() !== null ? $cookie->getDomain() : $request->getUri()->getHost();
                 $this->cookieStore->store($domain, $cookie);
             } catch (InvalidArgumentException $e) {
                 // invalid cookies
             }
         }
     }
     // check follow location
     if ($options->getFollowLocation() && ($response->getStatusCode() >= 300 && $response->getStatusCode() < 400)) {
         $location = (string) $response->getHeader('Location');
         if (!empty($location) && $location != $request->getUri()->toString()) {
             if ($options->getMaxRedirects() > $count) {
                 $location = UriResolver::resolve($request->getUri(), new Uri($location));
                 return $this->request(new GetRequest($location), $options, ++$count);
             } else {
                 throw new RedirectException('Max redirection reached');
             }
         }
     }
     return $response;
 }