[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-includes/Requests/ -> Session.php (source)

   1  <?php
   2  /**
   3   * Session handler for persistent requests and default parameters
   4   *
   5   * @package Requests
   6   * @subpackage Session Handler
   7   */
   8  
   9  /**
  10   * Session handler for persistent requests and default parameters
  11   *
  12   * Allows various options to be set as default values, and merges both the
  13   * options and URL properties together. A base URL can be set for all requests,
  14   * with all subrequests resolved from this. Base options can be set (including
  15   * a shared cookie jar), then overridden for individual requests.
  16   *
  17   * @package Requests
  18   * @subpackage Session Handler
  19   */
  20  class Requests_Session {
  21      /**
  22       * Base URL for requests
  23       *
  24       * URLs will be made absolute using this as the base
  25       * @var string|null
  26       */
  27      public $url = null;
  28  
  29      /**
  30       * Base headers for requests
  31       * @var array
  32       */
  33      public $headers = array();
  34  
  35      /**
  36       * Base data for requests
  37       *
  38       * If both the base data and the per-request data are arrays, the data will
  39       * be merged before sending the request.
  40       *
  41       * @var array
  42       */
  43      public $data = array();
  44  
  45      /**
  46       * Base options for requests
  47       *
  48       * The base options are merged with the per-request data for each request.
  49       * The only default option is a shared cookie jar between requests.
  50       *
  51       * Values here can also be set directly via properties on the Session
  52       * object, e.g. `$session->useragent = 'X';`
  53       *
  54       * @var array
  55       */
  56      public $options = array();
  57  
  58      /**
  59       * Create a new session
  60       *
  61       * @param string|null $url Base URL for requests
  62       * @param array $headers Default headers for requests
  63       * @param array $data Default data for requests
  64       * @param array $options Default options for requests
  65       */
  66  	public function __construct($url = null, $headers = array(), $data = array(), $options = array()) {
  67          $this->url = $url;
  68          $this->headers = $headers;
  69          $this->data = $data;
  70          $this->options = $options;
  71  
  72          if (empty($this->options['cookies'])) {
  73              $this->options['cookies'] = new Requests_Cookie_Jar();
  74          }
  75      }
  76  
  77      /**
  78       * Get a property's value
  79       *
  80       * @param string $key Property key
  81       * @return mixed|null Property value, null if none found
  82       */
  83  	public function __get($key) {
  84          if (isset($this->options[$key])) {
  85              return $this->options[$key];
  86          }
  87  
  88          return null;
  89      }
  90  
  91      /**
  92       * Set a property's value
  93       *
  94       * @param string $key Property key
  95       * @param mixed $value Property value
  96       */
  97  	public function __set($key, $value) {
  98          $this->options[$key] = $value;
  99      }
 100  
 101      /**
 102       * Remove a property's value
 103       *
 104       * @param string $key Property key
 105       */
 106  	public function __isset($key) {
 107          return isset($this->options[$key]);
 108      }
 109  
 110      /**
 111       * Remove a property's value
 112       *
 113       * @param string $key Property key
 114       */
 115  	public function __unset($key) {
 116          if (isset($this->options[$key])) {
 117              unset($this->options[$key]);
 118          }
 119      }
 120  
 121      /**#@+
 122       * @see request()
 123       * @param string $url
 124       * @param array $headers
 125       * @param array $options
 126       * @return Requests_Response
 127       */
 128      /**
 129       * Send a GET request
 130       */
 131  	public function get($url, $headers = array(), $options = array()) {
 132          return $this->request($url, $headers, null, Requests::GET, $options);
 133      }
 134  
 135      /**
 136       * Send a HEAD request
 137       */
 138  	public function head($url, $headers = array(), $options = array()) {
 139          return $this->request($url, $headers, null, Requests::HEAD, $options);
 140      }
 141  
 142      /**
 143       * Send a DELETE request
 144       */
 145  	public function delete($url, $headers = array(), $options = array()) {
 146          return $this->request($url, $headers, null, Requests::DELETE, $options);
 147      }
 148      /**#@-*/
 149  
 150      /**#@+
 151       * @see request()
 152       * @param string $url
 153       * @param array $headers
 154       * @param array $data
 155       * @param array $options
 156       * @return Requests_Response
 157       */
 158      /**
 159       * Send a POST request
 160       */
 161  	public function post($url, $headers = array(), $data = array(), $options = array()) {
 162          return $this->request($url, $headers, $data, Requests::POST, $options);
 163      }
 164  
 165      /**
 166       * Send a PUT request
 167       */
 168  	public function put($url, $headers = array(), $data = array(), $options = array()) {
 169          return $this->request($url, $headers, $data, Requests::PUT, $options);
 170      }
 171  
 172      /**
 173       * Send a PATCH request
 174       *
 175       * Note: Unlike {@see post} and {@see put}, `$headers` is required, as the
 176       * specification recommends that should send an ETag
 177       *
 178       * @link https://tools.ietf.org/html/rfc5789
 179       */
 180  	public function patch($url, $headers, $data = array(), $options = array()) {
 181          return $this->request($url, $headers, $data, Requests::PATCH, $options);
 182      }
 183      /**#@-*/
 184  
 185      /**
 186       * Main interface for HTTP requests
 187       *
 188       * This method initiates a request and sends it via a transport before
 189       * parsing.
 190       *
 191       * @see Requests::request()
 192       *
 193       * @throws Requests_Exception On invalid URLs (`nonhttp`)
 194       *
 195       * @param string $url URL to request
 196       * @param array $headers Extra headers to send with the request
 197       * @param array|null $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
 198       * @param string $type HTTP request type (use Requests constants)
 199       * @param array $options Options for the request (see {@see Requests::request})
 200       * @return Requests_Response
 201       */
 202  	public function request($url, $headers = array(), $data = array(), $type = Requests::GET, $options = array()) {
 203          $request = $this->merge_request(compact('url', 'headers', 'data', 'options'));
 204  
 205          return Requests::request($request['url'], $request['headers'], $request['data'], $type, $request['options']);
 206      }
 207  
 208      /**
 209       * Send multiple HTTP requests simultaneously
 210       *
 211       * @see Requests::request_multiple()
 212       *
 213       * @param array $requests Requests data (see {@see Requests::request_multiple})
 214       * @param array $options Global and default options (see {@see Requests::request})
 215       * @return array Responses (either Requests_Response or a Requests_Exception object)
 216       */
 217  	public function request_multiple($requests, $options = array()) {
 218          foreach ($requests as $key => $request) {
 219              $requests[$key] = $this->merge_request($request, false);
 220          }
 221  
 222          $options = array_merge($this->options, $options);
 223  
 224          // Disallow forcing the type, as that's a per request setting
 225          unset($options['type']);
 226  
 227          return Requests::request_multiple($requests, $options);
 228      }
 229  
 230      /**
 231       * Merge a request's data with the default data
 232       *
 233       * @param array $request Request data (same form as {@see request_multiple})
 234       * @param boolean $merge_options Should we merge options as well?
 235       * @return array Request data
 236       */
 237  	protected function merge_request($request, $merge_options = true) {
 238          if ($this->url !== null) {
 239              $request['url'] = Requests_IRI::absolutize($this->url, $request['url']);
 240              $request['url'] = $request['url']->uri;
 241          }
 242  
 243          if (empty($request['headers'])) {
 244              $request['headers'] = array();
 245          }
 246          $request['headers'] = array_merge($this->headers, $request['headers']);
 247  
 248          if (empty($request['data'])) {
 249              if (is_array($this->data)) {
 250                  $request['data'] = $this->data;
 251              }
 252          }
 253          elseif (is_array($request['data']) && is_array($this->data)) {
 254              $request['data'] = array_merge($this->data, $request['data']);
 255          }
 256  
 257          if ($merge_options !== false) {
 258              $request['options'] = array_merge($this->options, $request['options']);
 259  
 260              // Disallow forcing the type, as that's a per request setting
 261              unset($request['options']['type']);
 262          }
 263  
 264          return $request;
 265      }
 266  }


Generated: Thu Apr 2 01:00:03 2020 Cross-referenced by PHPXref 0.7.1