WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Платформа для конвертации и монетизации трафика
функция не описана

Requests::parse_response() protected WP 1.0

HTTP response parser

{} Это метод класса: Requests{}

Хуков нет.

Возвращает

Requests_Response.

Использование

$result = Requests::parse_response( $headers, $url, $req_headers, $req_data, $options );
$headers(строка) (обязательный)
Full response text including headers and body
$url(строка) (обязательный)
Original request URL
$req_headers(массив) (обязательный)
Original $headers array passed to request(), in case we need to follow redirects
$req_data(массив) (обязательный)
Original $data array passed to request(), in case we need to follow redirects
$options(массив) (обязательный)
Original $options array passed to request(), in case we need to follow redirects

Код Requests::parse_response() WP 5.5.3

<?php
protected static function parse_response($headers, $url, $req_headers, $req_data, $options) {
	$return = new Requests_Response();
	if (!$options['blocking']) {
		return $return;
	}

	$return->raw = $headers;
	$return->url = $url;

	if (!$options['filename']) {
		if (($pos = strpos($headers, "\r\n\r\n")) === false) {
			// Crap!
			throw new Requests_Exception('Missing header/body separator', 'requests.no_crlf_separator');
		}

		$headers = substr($return->raw, 0, $pos);
		$return->body = substr($return->raw, $pos + strlen("\n\r\n\r"));
	}
	else {
		$return->body = '';
	}
	// Pretend CRLF = LF for compatibility (RFC 2616, section 19.3)
	$headers = str_replace("\r\n", "\n", $headers);
	// Unfold headers (replace [CRLF] 1*( SP | HT ) with SP) as per RFC 2616 (section 2.2)
	$headers = preg_replace('/\n[ \t]/', ' ', $headers);
	$headers = explode("\n", $headers);
	preg_match('#^HTTP/(1\.\d)[ \t]+(\d+)#i', array_shift($headers), $matches);
	if (empty($matches)) {
		throw new Requests_Exception('Response could not be parsed', 'noversion', $headers);
	}
	$return->protocol_version = (float) $matches[1];
	$return->status_code = (int) $matches[2];
	if ($return->status_code >= 200 && $return->status_code < 300) {
		$return->success = true;
	}

	foreach ($headers as $header) {
		list($key, $value) = explode(':', $header, 2);
		$value = trim($value);
		preg_replace('#(\s+)#i', ' ', $value);
		$return->headers[$key] = $value;
	}
	if (isset($return->headers['transfer-encoding'])) {
		$return->body = self::decode_chunked($return->body);
		unset($return->headers['transfer-encoding']);
	}
	if (isset($return->headers['content-encoding'])) {
		$return->body = self::decompress($return->body);
	}

	//fsockopen and cURL compatibility
	if (isset($return->headers['connection'])) {
		unset($return->headers['connection']);
	}

	$options['hooks']->dispatch('requests.before_redirect_check', array(&$return, $req_headers, $req_data, $options));

	if ($return->is_redirect() && $options['follow_redirects'] === true) {
		if (isset($return->headers['location']) && $options['redirected'] < $options['redirects']) {
			if ($return->status_code === 303) {
				$options['type'] = self::GET;
			}
			$options['redirected']++;
			$location = $return->headers['location'];
			if (strpos($location, 'http://') !== 0 && strpos($location, 'https://') !== 0) {
				// relative redirect, for compatibility make it absolute
				$location = Requests_IRI::absolutize($url, $location);
				$location = $location->uri;
			}

			$hook_args = array(
				&$location,
				&$req_headers,
				&$req_data,
				&$options,
				$return
			);
			$options['hooks']->dispatch('requests.before_redirect', $hook_args);
			$redirected = self::request($location, $req_headers, $req_data, $options['type'], $options);
			$redirected->history[] = $return;
			return $redirected;
		}
		elseif ($options['redirected'] >= $options['redirects']) {
			throw new Requests_Exception('Too many redirects', 'toomanyredirects', $return);
		}
	}

	$return->redirects = $options['redirected'];

	$options['hooks']->dispatch('requests.after_request', array(&$return, $req_headers, $req_data, $options));
	return $return;
}