コード例 #1
0
 /**
  * @param ReactRequest $reactRequest
  * @return resource
  */
 private function createBodyStream(ReactRequest $reactRequest)
 {
     $body = fopen('php://temp', 'w+');
     fwrite($body, $reactRequest->getBody());
     fseek($body, 0);
     return $body;
 }
コード例 #2
0
ファイル: RequestParser.php プロジェクト: marcj/php-pm
 protected function fixHeaderNames(Request $request)
 {
     $headers = $request->getHeaders();
     foreach ($headers as $name => $v) {
         $newName = str_replace(' ', '-', ucwords(strtolower(str_replace('-', ' ', $name))));
         $headers[$newName] = $headers[$name];
     }
     if (isset($headers['Content-Type'])) {
         $headers['Content-Type'] = explode(';', $headers['Content-Type'])[0];
     }
     $request->__construct($request->getMethod(), $request->getUrl(), $request->getQuery(), $request->getHttpVersion(), $headers, $request->getBody());
 }
コード例 #3
0
ファイル: Request.php プロジェクト: onigoetz/reactavel
 public function transformFromReact(ReactRequest $request)
 {
     $this->baseUrl = '';
     $this->requestUri = $request->getPath();
     $this->content = $request->getBody();
     // Request Headers
     $this->headers = new HeaderBag($request->getHeaders());
     // Server informations ($_SERVER)
     $this->server = new ServerBag($this->buildServerBag($request));
     // Request body parameters ($_POST).
     if (0 === strpos($this->headers->get('CONTENT_TYPE'), 'application/x-www-form-urlencoded') && in_array(strtoupper($this->server->get('REQUEST_METHOD', 'GET')), ['POST', 'PUT', 'DELETE', 'PATCH'])) {
         $this->request = new ParameterBag($request->getPost());
     }
     // Query string parameters ($_GET).
     $this->query = new ParameterBag($request->getQuery());
     // Request attributes
     $this->attributes = new ParameterBag([]);
     // Cookies
     $this->cookies = new ParameterBag($this->buildCookieBag());
     // Files uploads
     $this->files = new FileBag($this->buildFileBag($request));
 }
コード例 #4
0
ファイル: RequestParser.php プロジェクト: pwhelan/http
 protected function finishParsing()
 {
     $this->emit('headers', array($this->request, $this->request->getBody()));
     $this->removeAllListeners();
     $this->request = null;
 }
コード例 #5
0
ファイル: Processor.php プロジェクト: naroga/foreman
 /**
  * Manages a request, made to the Http server.
  *
  * @param \React\Http\Request $request
  * @param \React\Http\Response $response
  */
 public function manageRequest($request, $response)
 {
     $requestData = [$request->getHeaders()['Host'] . $request->getPath(), $request->getMethod(), array_merge($request->getQuery(), $request->getPost()), [], $request->getFiles(), []];
     $contentType = isset($request->getHeaders()['Content-Type']) ? $request->getHeaders()['Content-Type'] : 'application/x-www-form-urlencoded';
     if (strtolower($contentType) == 'application/x-www-form-urlencoded') {
         $requestData[] = http_build_query($request->getPost());
     } else {
         $requestData[] = $request->getBody();
     }
     //Creates the Symfony Request from the React Request.
     $sRequest = Request::create(...$requestData);
     /** @var Response $sResponse */
     $sResponse = $this->kernel->handle($sRequest);
     $response->writeHead($sResponse->getStatusCode());
     $response->end($sResponse->getContent());
 }
コード例 #6
0
ファイル: DumperWebhook.php プロジェクト: zilkil/zilack
 private function generateMessage(Request $request)
 {
     $data = $request->getPost();
     $data = empty($data) ? $request->getBody() : $data;
     return sprintf("I just received a webhook. Here's the content: `%s`", json_encode($data));
 }
コード例 #7
0
ファイル: run.php プロジェクト: mpcmf/mpcmf-web
 public function prepare(reactRequest $request, reactResponse $response, $output)
 {
     static $serverSoftware, $settings;
     if ($serverSoftware === null) {
         $serverSoftware = 'MPCMF Async PHP ' . phpversion();
         $settings = ['document_root' => APP_ROOT . '/htdocs'];
     }
     $_SERVER = [];
     $now = microtime(true);
     $_SERVER['REQUEST_TIME'] = (int) $now;
     $_SERVER['REQUEST_TIME_FLOAT'] = $now;
     $GLOBALS['MPCMF_START_TIME'] = $now;
     /** @var Uri $requestUrl */
     $requestUrl = $request->getUrl();
     $path = $requestUrl->getPath();
     if ($path === '/favicon.ico') {
         $response->writeHead(404);
         $response->end('FAVICON NOT FOUND! :)');
         //MPCMF_DEBUG && $output->writeln("<info>[CHILD:{$this->port}]</info> Connection closed by favicon catch");
         return false;
     }
     $realpath = realpath($settings['document_root'] . $path);
     if ($realpath !== false && strpos($realpath, $settings['document_root']) !== false && (file_exists($realpath) && !is_dir($realpath))) {
         $response->writeHead(200, ['Content-type' => \GuzzleHttp\Psr7\mimetype_from_filename($realpath), 'Content-length' => filesize($realpath)]);
         $response->end(file_get_contents($realpath));
         //MPCMF_DEBUG && $output->writeln("<info>[CHILD:{$this->port}]</info> Connection closed by static");
         return false;
     }
     $_FILES = [];
     foreach ($request->getFiles() as $filename => $fileData) {
         $tmpname = tempnam('/tmp/mpcmf/', 'upl');
         file_put_contents($tmpname, stream_get_contents($fileData['stream']));
         $_FILES[$filename] = ['name' => $filename, 'type' => $fileData['type'], 'tmp_name' => $tmpname, 'error' => $fileData['error'], 'size' => $fileData['size']];
     }
     $_SERVER['DOCUMENT_ROOT'] = $settings['document_root'];
     $_SERVER['REMOTE_ADDR'] = $request->getRemoteAddress();
     $_SERVER['REMOTE_PORT'] = 0;
     $_SERVER['SERVER_SOFTWARE'] = $serverSoftware;
     $_SERVER['SERVER_PROTOCOL'] = "HTTP/{$request->getHttpVersion()}";
     $_SERVER['SERVER_NAME'] = $this->childHost;
     $_SERVER['SERVER_PORT'] = $this->port;
     $path = $requestUrl->getPath();
     $queryString = $requestUrl->getQuery();
     $_SERVER['REQUEST_URI'] = $path . (!empty($queryString) ? "?{$queryString}" : '');
     $_SERVER['REQUEST_METHOD'] = mb_strtoupper($request->getMethod());
     $_SERVER['SCRIPT_NAME'] = '/';
     $_SERVER['SCRIPT_FILENAME'] = __FILE__;
     $_SERVER['PATH_INFO'] = $path;
     $_SERVER['PHP_SELF'] = $path;
     $headers = $request->getHeaders();
     foreach ($headers as $headerKey => $headerValue) {
         $_SERVER['HTTP_' . strtoupper(preg_replace('/[\\-\\s]/', '_', $headerKey))] = $headerValue;
     }
     if (isset($_SERVER['HTTP_X_REAL_IP'])) {
         $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];
     }
     $_SERVER['QUERY_STRING'] = $queryString;
     //@todo remove on pull request merge https://github.com/reactphp/http/pull/34
     $_GET = $request->getQuery();
     $_POST = $request->getPost();
     parse_str($queryString, $parsedGET);
     parse_str($request->getBody(), $parsedPOST);
     $_GET = array_replace($_GET, $parsedGET);
     $_POST = array_replace($_POST, $parsedPOST);
     if (isset($_SERVER['HTTP_COOKIE'])) {
         parse_str($_SERVER['HTTP_COOKIE'], $_COOKIE);
     } else {
         $_COOKIE = [];
     }
     $_REQUEST = array_merge($_GET, $_POST);
     return true;
 }
コード例 #8
0
 /**
  * @param ReactRequest $reactRequest
  *
  * @return StreamInterface
  */
 private function transformBody(ReactRequest $reactRequest)
 {
     $body = $this->psr7Factory->createStream();
     $body->write((string) $reactRequest->getBody());
     $body->rewind();
     return $body;
 }