* @license http://www.apache.org/licenses/LICENSE-2.0 * @link http://phpsx.org */ class RequestParser extends ParserAbstract { protected $baseUrl; public function __construct(Url $baseUrl = null, $mode = self::MODE_STRICT) { parent::__construct($mode); $this->baseUrl = $baseUrl; } /** * Converts an raw http request into an PSX\Http\Request object * * @param string $content * @return \PSX\Http\Request * @throws \PSX\Http\Parser\ParseException */ 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; } /** * @param string $request * @return array * @throws \PSX\Http\Parser\ParseException */ protected function getStatus($request) { $line = $this->getStatusLine($request); if ($line !== false) { $parts = explode(' ', $line, 3); if (isset($parts[0]) && isset($parts[1]) && isset($parts[2])) { $method = $parts[0]; $path = $parts[1]; $scheme = $parts[2]; return array($method, $path, $scheme); } else { throw new ParseException('Invalid status line format'); } } else { throw new ParseException('Couldnt find status line'); } } /** * @param \PSX\Http\RequestInterface $request * @return string */ public static function buildStatusLine(RequestInterface $request) { $method = $request->getMethod(); $target = $request->getRequestTarget(); $protocol = $request->getProtocolVersion(); if (empty($target)) { throw new \RuntimeException('Target not set'); } $method = !empty($method) ? $method : 'GET'; $protocol = !empty($protocol) ? $protocol : 'HTTP/1.1'; return $method . ' ' . $target . ' ' . $protocol; } /** * Parses an raw http request into an PSX\Http\Request object. Throws an * exception if the request has not an valid format * * @param string $content * @param \PSX\Uri\Url $baseUrl * @param integer $mode * @return \PSX\Http\RequestInterface * @throws \PSX\Http\Parser\ParseException */ public static function convert($content, Url $baseUrl = null, $mode = ParserAbstract::MODE_STRICT) { $parser = new self($baseUrl, $mode); return $parser->parse($content); } } __halt_compiler();----SIGNATURE:----GEklu5X8kUa2YntWZTgeT3SllniG1d1smdXAtXsQkqAyaHDXI2QQ8vL0FM5V/VAJ07Nixyjc7ynl34RnauEk9oH4Eg7fydnc3Zrlwh29PGe5tpznTNJeDd3h77jXxuqzVUyYBwhh9BXT5+Z95ZBm3b7fTRdH4RY1iK4QnKbF0M0MBnn9dHT3XXfgFR/LFHNJBn29VDFp13liRu9/s2W0EHB7SSo8BWL25xjsvmbfpunMS251hKoF/vHjXBEfv2zco4cIkydiqm4FcoprYvx05J+57k0zf2+rQepRFXIslryM19BFTXeH0kAms3S2V7J9WhMK8tDHEsbrXNlTdIl03d6Hl6NdNtHSNPLviPg2FTXKphMrYbF/xlfNRmXtIitq6yfz6JvCEoyDLrat+v1o/P+i2jiJtdHt5qKX/mp9zMHXV9iNaPCluBSdfWJ3RTeI5k+K+8QcHgDlw9O3jxlD92S2MQlSQML2qR4YPE8Fqlru8DFx9GiswTi+Q16yP6iXJEISIpwPF+NMZWKN7JhK9IqwOKHviM6c2wJQom5CCaZwMDHQ/nJNIcxiT8I/m69FvU5jkW81POeU9jKD65Awk1tXZSc5ha3bXl3lBQjwd2JFo5L4uW43LUnbZlEG2IuYpHOzYcrF4NU650kVl2q7lv9bCq5G/PTu93R4xvfVg/E=----ATTACHMENT:----MjE1MTYwMjQ2ODgxNzYwIDg0NzU5MjE0NTU0NzM1MjIgMjY4OTc4Mjg1ODI0MzM1Nw==