1
0

request.class.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. namespace Juju\Http;
  3. require_once('uri.class.php');
  4. class Request {
  5. private $verb;
  6. private $url;
  7. private $headers;
  8. private $body;
  9. public function __construct($verb, $url, array $headers = [], string $body = ''){
  10. if(is_string($url) || is_array($url)){
  11. $this->url = new Uri($url);
  12. }elseif($url instanceof Uri){
  13. $this->url = $url;
  14. }else{
  15. throw new \Exception("Invalid url {$url}");
  16. }
  17. if(is_array($headers)){
  18. $this->headers = $headers;
  19. }else{
  20. $this->headers = [];
  21. }
  22. $this->verb = $verb;
  23. $this->body = $body;
  24. }
  25. public function __get($name){
  26. switch($name){
  27. case 'headers':case 'url':case 'body':case 'verb':
  28. return $this->$name;
  29. break;
  30. }
  31. }
  32. public function header($name){
  33. return $this->headers[$name] ?? null;
  34. }
  35. public function text(){
  36. return $this->body;
  37. }
  38. public function json(bool $assoc = true){
  39. return json_decode($this->body, $assoc);
  40. }
  41. public function xml(string $classname = 'SimpleXMLElement', int $options, string $ns = '', bool $is_prefix = false){
  42. return simplexml_load_string($this->body, $classname, $options, $ns, $is_prefix);
  43. }
  44. public function msgpack(){
  45. if(!extension_loaded("msgpack")){
  46. throw new \Exception("Unable to load msgpack extension");
  47. }
  48. return msgpack_unpack($this->body);
  49. }
  50. public static function get_url(){
  51. if(isset($_SERVER['REDIRECT_URL'])){
  52. $url = 'REDIRECT_URL';
  53. }else{
  54. $url = 'REQUEST_URI';
  55. }
  56. if(!empty($_SERVER['HTTP_X_FORWARDED_PROTO'])){
  57. $root = $_SERVER['HTTP_X_FORWARDED_PROTO'].'://';
  58. }else{
  59. $root = !empty($_SERVER['HTTPS']) ? "https://" : "http://";
  60. }
  61. // @todo - determine if http or http and also check cloudflare
  62. return parse_url($root.$_SERVER['HTTP_HOST'].$_SERVER[$url]);
  63. }
  64. public static function get_headers(){
  65. return getallheaders();
  66. }
  67. public static function get_body(){
  68. return file_get_contents( 'php://input','r');
  69. }
  70. public static function get_verb(){
  71. return $_SERVER['REQUEST_METHOD'];
  72. }
  73. }
  74. ?>