PageRenderTime 103ms CodeModel.GetById 60ms app.highlight 6ms RepoModel.GetById 34ms app.codeStats 1ms

/wp-includes/http.php

https://bitbucket.org/aqge/deptandashboard
PHP | 224 lines | 65 code | 24 blank | 135 comment | 25 complexity | bc937df8b725c034a4e5ef6a0ed45c6c MD5 | raw file
  1<?php
  2/**
  3 * Simple and uniform HTTP request API.
  4 *
  5 * Will eventually replace and standardize the WordPress HTTP requests made.
  6 *
  7 * @link http://trac.wordpress.org/ticket/4779 HTTP API Proposal
  8 *
  9 * @package WordPress
 10 * @subpackage HTTP
 11 * @since 2.7.0
 12 */
 13
 14/**
 15 * Returns the initialized WP_Http Object
 16 *
 17 * @since 2.7.0
 18 * @access private
 19 *
 20 * @return WP_Http HTTP Transport object.
 21 */
 22function &_wp_http_get_object() {
 23	static $http;
 24
 25	if ( is_null($http) )
 26		$http = new WP_Http();
 27
 28	return $http;
 29}
 30
 31/**
 32 * Retrieve the raw response from the HTTP request.
 33 *
 34 * The array structure is a little complex.
 35 *
 36 * <code>
 37 * $res = array( 'headers' => array(), 'response' => array('code' => int, 'message' => string) );
 38 * </code>
 39 *
 40 * All of the headers in $res['headers'] are with the name as the key and the
 41 * value as the value. So to get the User-Agent, you would do the following.
 42 *
 43 * <code>
 44 * $user_agent = $res['headers']['user-agent'];
 45 * </code>
 46 *
 47 * The body is the raw response content and can be retrieved from $res['body'].
 48 *
 49 * This function is called first to make the request and there are other API
 50 * functions to abstract out the above convoluted setup.
 51 *
 52 * @since 2.7.0
 53 *
 54 * @param string $url Site URL to retrieve.
 55 * @param array $args Optional. Override the defaults.
 56 * @return WP_Error|array The response or WP_Error on failure.
 57 */
 58function wp_remote_request($url, $args = array()) {
 59	$objFetchSite = _wp_http_get_object();
 60	return $objFetchSite->request($url, $args);
 61}
 62
 63/**
 64 * Retrieve the raw response from the HTTP request using the GET method.
 65 *
 66 * @see wp_remote_request() For more information on the response array format.
 67 *
 68 * @since 2.7.0
 69 *
 70 * @param string $url Site URL to retrieve.
 71 * @param array $args Optional. Override the defaults.
 72 * @return WP_Error|array The response or WP_Error on failure.
 73 */
 74function wp_remote_get($url, $args = array()) {
 75	$objFetchSite = _wp_http_get_object();
 76	return $objFetchSite->get($url, $args);
 77}
 78
 79/**
 80 * Retrieve the raw response from the HTTP request using the POST method.
 81 *
 82 * @see wp_remote_request() For more information on the response array format.
 83 *
 84 * @since 2.7.0
 85 *
 86 * @param string $url Site URL to retrieve.
 87 * @param array $args Optional. Override the defaults.
 88 * @return WP_Error|array The response or WP_Error on failure.
 89 */
 90function wp_remote_post($url, $args = array()) {
 91	$objFetchSite = _wp_http_get_object();
 92	return $objFetchSite->post($url, $args);
 93}
 94
 95/**
 96 * Retrieve the raw response from the HTTP request using the HEAD method.
 97 *
 98 * @see wp_remote_request() For more information on the response array format.
 99 *
100 * @since 2.7.0
101 *
102 * @param string $url Site URL to retrieve.
103 * @param array $args Optional. Override the defaults.
104 * @return WP_Error|array The response or WP_Error on failure.
105 */
106function wp_remote_head($url, $args = array()) {
107	$objFetchSite = _wp_http_get_object();
108	return $objFetchSite->head($url, $args);
109}
110
111/**
112 * Retrieve only the headers from the raw response.
113 *
114 * @since 2.7.0
115 *
116 * @param array $response HTTP response.
117 * @return array The headers of the response. Empty array if incorrect parameter given.
118 */
119function wp_remote_retrieve_headers(&$response) {
120	if ( is_wp_error($response) || ! isset($response['headers']) || ! is_array($response['headers']))
121		return array();
122
123	return $response['headers'];
124}
125
126/**
127 * Retrieve a single header by name from the raw response.
128 *
129 * @since 2.7.0
130 *
131 * @param array $response
132 * @param string $header Header name to retrieve value from.
133 * @return string The header value. Empty string on if incorrect parameter given, or if the header doesn't exist.
134 */
135function wp_remote_retrieve_header(&$response, $header) {
136	if ( is_wp_error($response) || ! isset($response['headers']) || ! is_array($response['headers']))
137		return '';
138
139	if ( array_key_exists($header, $response['headers']) )
140		return $response['headers'][$header];
141
142	return '';
143}
144
145/**
146 * Retrieve only the response code from the raw response.
147 *
148 * Will return an empty array if incorrect parameter value is given.
149 *
150 * @since 2.7.0
151 *
152 * @param array $response HTTP response.
153 * @return string the response code. Empty string on incorrect parameter given.
154 */
155function wp_remote_retrieve_response_code(&$response) {
156	if ( is_wp_error($response) || ! isset($response['response']) || ! is_array($response['response']))
157		return '';
158
159	return $response['response']['code'];
160}
161
162/**
163 * Retrieve only the response message from the raw response.
164 *
165 * Will return an empty array if incorrect parameter value is given.
166 *
167 * @since 2.7.0
168 *
169 * @param array $response HTTP response.
170 * @return string The response message. Empty string on incorrect parameter given.
171 */
172function wp_remote_retrieve_response_message(&$response) {
173	if ( is_wp_error($response) || ! isset($response['response']) || ! is_array($response['response']))
174		return '';
175
176	return $response['response']['message'];
177}
178
179/**
180 * Retrieve only the body from the raw response.
181 *
182 * @since 2.7.0
183 *
184 * @param array $response HTTP response.
185 * @return string The body of the response. Empty string if no body or incorrect parameter given.
186 */
187function wp_remote_retrieve_body(&$response) {
188	if ( is_wp_error($response) || ! isset($response['body']) )
189		return '';
190
191	return $response['body'];
192}
193
194/**
195 * Determines if there is an HTTP Transport that can process this request.
196 *
197 * @since 3.2.0
198 *
199 * @param array  $capabilities Array of capabilities to test or a wp_remote_request() $args array.
200 * @param string $url Optional.  If given, will check if the URL requires SSL and adds that requirement to the capabilities array.
201 *
202 * @return bool
203 */
204function wp_http_supports( $capabilities = array(), $url = null ) {
205	$objFetchSite = _wp_http_get_object();
206
207	$capabilities = wp_parse_args( $capabilities );
208
209	$count = count( $capabilities );
210
211	// If we have a numeric $capabilities array, spoof a wp_remote_request() associative $args array
212	if ( $count && count( array_filter( array_keys( $capabilities ), 'is_numeric' ) ) == $count ) {
213		$capabilities = array_combine( array_values( $capabilities ), array_fill( 0, $count, true ) );
214	}
215
216	if ( $url && !isset( $capabilities['ssl'] ) ) {
217		$scheme = parse_url( $url, PHP_URL_SCHEME );
218		if ( 'https' == $scheme || 'ssl' == $scheme ) {
219			$capabilities['ssl'] = true;
220		}
221	}
222
223	return (bool) $objFetchSite->_get_first_available_transport( $capabilities );
224}