Transforms header string into an array.
Parameters
$headers
string|arrayrequired- The original headers. If a string is passed, it will be converted to an array. If an array is passed, then it is assumed to be raw header data with numeric keys with the headers as the values.
No headers must be passed that were already processed. $url
stringoptional- The URL that was requested.
Default:
''
Return
array Processed string headers. If duplicate headers are encountered, then a numbered array is returned as the value of that header-key.response
arraycode
intThe response status code. Default 0.message
stringThe response message. Default empty.
newheaders
arrayThe processed header data as a multidimensional array.cookies
WP_Http_Cookie[]If the original headers contain the'Set-Cookie'
key, an array containingWP_Http_Cookie
objects is returned.
Source
public static function processHeaders( $headers, $url = '' ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid // Split headers, one per array element. if ( is_string( $headers ) ) { // Tolerate line terminator: CRLF = LF (RFC 2616 19.3). $headers = str_replace( "\r\n", "\n", $headers ); /* * Unfold folded header fields. LWS = [CRLF] 1*( SP | HT ) <US-ASCII SP, space (32)>, * <US-ASCII HT, horizontal-tab (9)> (RFC 2616 2.2). */ $headers = preg_replace( '/\n[ \t]/', ' ', $headers ); // Create the headers array. $headers = explode( "\n", $headers ); } $response = array( 'code' => 0, 'message' => '', ); /* * If a redirection has taken place, The headers for each page request may have been passed. * In this case, determine the final HTTP header and parse from there. */ for ( $i = count( $headers ) - 1; $i >= 0; $i-- ) { if ( ! empty( $headers[ $i ] ) && ! str_contains( $headers[ $i ], ':' ) ) { $headers = array_splice( $headers, $i ); break; } } $cookies = array(); $newheaders = array(); foreach ( (array) $headers as $tempheader ) { if ( empty( $tempheader ) ) { continue; } if ( ! str_contains( $tempheader, ':' ) ) { $stack = explode( ' ', $tempheader, 3 ); $stack[] = ''; list( , $response['code'], $response['message']) = $stack; continue; } list($key, $value) = explode( ':', $tempheader, 2 ); $key = strtolower( $key ); $value = trim( $value ); if ( isset( $newheaders[ $key ] ) ) { if ( ! is_array( $newheaders[ $key ] ) ) { $newheaders[ $key ] = array( $newheaders[ $key ] ); } $newheaders[ $key ][] = $value; } else { $newheaders[ $key ] = $value; } if ( 'set-cookie' === $key ) { $cookies[] = new WP_Http_Cookie( $value, $url ); } } // Cast the Response Code to an int. $response['code'] = (int) $response['code']; return array( 'response' => $response, 'headers' => $newheaders, 'cookies' => $cookies, ); }
Related
Uses Description WP_Http_Cookie::__construct() wp-includes/class-wp-http-cookie.php
Sets up this cookie object.
Used by Description WP_Http_Curl::request() wp-includes/class-wp-http-curl.php
Send a HTTP request to a URI using cURL extension.
WP_Http_Streams::request() wp-includes/class-wp-http-streams.php
Send a HTTP request to a URI using PHP Streams.
WP_Http::request() wp-includes/class-wp-http.php
Send an HTTP request to a URI.
Changelog
Version Description 2.7.0 Introduced.
User Contributed Notes
You must log in before being able to contribute a note or feedback.