PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.3
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.3
16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / vendor / wp-php-toolkit / http-client / class-request.php
jetpack / vendor / wp-php-toolkit / http-client Last commit date
ByteStream 6 days ago Middleware 6 days ago Transport 6 days ago examples 6 days ago LICENSE.md 6 days ago README.md 6 days ago class-client.php 6 days ago class-clientstate.php 6 days ago class-connection.php 6 days ago class-crawler.php 6 days ago class-httpclientexception.php 6 days ago class-httperror.php 6 days ago class-request.php 6 days ago class-response.php 6 days ago composer.json 6 days ago
class-request.php
147 lines
1 <?php
2
3 namespace WordPress\HttpClient;
4
5 class Request {
6
7 const STATE_CREATED = 'STATE_CREATED';
8 const STATE_ENQUEUED = 'STATE_ENQUEUED';
9 const STATE_WILL_ENABLE_CRYPTO = 'STATE_WILL_ENABLE_CRYPTO';
10 const STATE_WILL_SEND_HEADERS = 'STATE_WILL_SEND_HEADERS';
11 const STATE_WILL_SEND_BODY = 'STATE_WILL_SEND_BODY';
12 const STATE_SENT = 'STATE_SENT';
13 const STATE_RECEIVING_HEADERS = 'STATE_RECEIVING_HEADERS';
14 const STATE_RECEIVING_BODY = 'STATE_RECEIVING_BODY';
15 const STATE_RECEIVED = 'STATE_RECEIVED';
16 const STATE_FAILED = 'STATE_FAILED';
17 const STATE_FINISHED = 'STATE_FINISHED';
18
19 private static $last_id;
20
21 public $id;
22
23 public $state = self::STATE_CREATED;
24
25 public $url;
26 public $is_ssl;
27 public $method;
28 public $headers;
29 public $http_version;
30 /**
31 * @var WP_Byte_Reader
32 */
33 public $upload_body_stream;
34 public $redirected_from;
35 public $redirected_to;
36
37 public $cache_key;
38
39 /**
40 * @var HttpError
41 */
42 public $error;
43 /**
44 * @var Response
45 */
46 public $response;
47
48 /**
49 * @param string $url
50 */
51 public function __construct( string $url, $request_info = array() ) {
52 $request_info = array_merge(
53 array(
54 'http_version' => '1.1',
55 'method' => 'GET',
56 'headers' => array(),
57 'body_stream' => null,
58 'redirected_from' => null,
59 ),
60 $request_info
61 );
62
63 $this->id = ++ self::$last_id;
64 $this->is_ssl = 0 === strpos( $url, 'https://' );
65
66 // Extract username/password from URL if present.
67 // @TODO: Use the WHATWG URL parser.
68 $url_parts = parse_url( $url );
69 if ( ! empty( $url_parts['user'] ) ) {
70 $auth = $url_parts['user'];
71 if ( ! empty( $url_parts['pass'] ) ) {
72 $auth .= ':' . $url_parts['pass'];
73 }
74 // Add basic auth header.
75 $request_info['headers']['authorization'] = 'Basic ' . base64_encode( $auth );
76
77 // Remove credentials from URL.
78 $url =
79 $url_parts['scheme'] . '://' .
80 $url_parts['host'] .
81 ( ! empty( $url_parts['port'] ) ? ':' . $url_parts['port'] : '' ) .
82 ( ! empty( $url_parts['path'] ) ? $url_parts['path'] : '' ) .
83 ( ! empty( $url_parts['query'] ) ? '?' . $url_parts['query'] : '' ) .
84 ( ! empty( $url_parts['fragment'] ) ? '#' . $url_parts['fragment'] : '' );
85 }
86
87 $this->url = $url;
88 $this->method = $request_info['method'];
89
90 $headers = array(
91 'host' => isset( $url_parts['host'] ) ? $url_parts['host'] : '',
92 'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',
93 'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
94 'accept-language' => 'en-US,en;q=0.9',
95 'connection' => 'close',
96 );
97 if ( $request_info['body_stream'] ) {
98 $length = $request_info['body_stream']->length();
99 if ( null !== $length ) {
100 $headers['content-length'] = $length;
101 } else {
102 $headers['transfer-encoding'] = 'chunked';
103 }
104 }
105 foreach ( $request_info['headers'] as $k => $v ) {
106 $headers[ $k ] = $v;
107 }
108 $this->headers = array_change_key_case( $headers, CASE_LOWER );
109 $this->upload_body_stream = $request_info['body_stream'];
110 $this->http_version = $request_info['http_version'];
111 $this->redirected_from = $request_info['redirected_from'];
112 if ( $this->redirected_from ) {
113 $this->redirected_from->redirected_to = $this;
114 }
115 }
116
117 public function __clone() {
118 $this->id = ++ self::$last_id;
119 }
120
121 public function get_header( $name ) {
122 return $this->headers[ $name ] ?? null;
123 }
124
125 public function latest_redirect() {
126 $request = $this;
127 while ( $request->redirected_to ) {
128 $request = $request->redirected_to;
129 }
130
131 return $request;
132 }
133
134 public function original_request() {
135 $request = $this;
136 while ( $request->redirected_from ) {
137 $request = $request->redirected_from;
138 }
139
140 return $request;
141 }
142
143 public function is_redirected() {
144 return null !== $this->redirected_to;
145 }
146 }
147