Completed
Pull Request — 1.11.x (#1599)
by José
28:19
created

Requests_Response   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 107
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
dl 0
loc 107
rs 10
c 0
b 0
f 0
wmc 8
lcom 1
cbo 4

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A is_redirect() 0 4 3
A throw_for_status() 0 11 4
1
<?php
2
/**
3
 * HTTP response class
4
 *
5
 * Contains a response from Requests::request()
6
 * @package Requests
7
 */
8
9
/**
10
 * HTTP response class
11
 *
12
 * Contains a response from Requests::request()
13
 * @package Requests
14
 */
15
class Requests_Response {
16
	/**
17
	 * Constructor
18
	 */
19
	public function __construct() {
20
		$this->headers = new Requests_Response_Headers();
21
		$this->cookies = new Requests_Cookie_Jar();
22
	}
23
24
	/**
25
	 * Response body
26
	 *
27
	 * @var string
28
	 */
29
	public $body = '';
30
31
	/**
32
	 * Raw HTTP data from the transport
33
	 *
34
	 * @var string
35
	 */
36
	public $raw = '';
37
38
	/**
39
	 * Headers, as an associative array
40
	 *
41
	 * @var Requests_Response_Headers Array-like object representing headers
42
	 */
43
	public $headers = array();
44
45
	/**
46
	 * Status code, false if non-blocking
47
	 *
48
	 * @var integer|boolean
49
	 */
50
	public $status_code = false;
51
52
	/**
53
	 * Protocol version, false if non-blocking
54
	 * @var float|boolean
55
	 */
56
	public $protocol_version = false;
57
58
	/**
59
	 * Whether the request succeeded or not
60
	 *
61
	 * @var boolean
62
	 */
63
	public $success = false;
64
65
	/**
66
	 * Number of redirects the request used
67
	 *
68
	 * @var integer
69
	 */
70
	public $redirects = 0;
71
72
	/**
73
	 * URL requested
74
	 *
75
	 * @var string
76
	 */
77
	public $url = '';
78
79
	/**
80
	 * Previous requests (from redirects)
81
	 *
82
	 * @var array Array of Requests_Response objects
83
	 */
84
	public $history = array();
85
86
	/**
87
	 * Cookies from the request
88
	 *
89
	 * @var Requests_Cookie_Jar Array-like object representing a cookie jar
90
	 */
91
	public $cookies = array();
92
93
	/**
94
	 * Is the response a redirect?
95
	 *
96
	 * @return boolean True if redirect (3xx status), false if not.
97
	 */
98
	public function is_redirect() {
99
		$code = $this->status_code;
100
		return in_array($code, array(300, 301, 302, 303, 307)) || $code > 307 && $code < 400;
101
	}
102
103
	/**
104
	 * Throws an exception if the request was not successful
105
	 *
106
	 * @throws Requests_Exception If `$allow_redirects` is false, and code is 3xx (`response.no_redirects`)
107
	 * @throws Requests_Exception_HTTP On non-successful status code. Exception class corresponds to code (e.g. {@see Requests_Exception_HTTP_404})
108
	 * @param boolean $allow_redirects Set to false to throw on a 3xx as well
109
	 */
110
	public function throw_for_status($allow_redirects = true) {
111
		if ($this->is_redirect()) {
112
			if (!$allow_redirects) {
113
				throw new Requests_Exception('Redirection not allowed', 'response.no_redirects', $this);
114
			}
115
		}
116
		elseif (!$this->success) {
117
			$exception = Requests_Exception_HTTP::get_class($this->status_code);
118
			throw new $exception(null, $this);
119
		}
120
	}
121
}
122