A nice PHP alternative, might need work, but works for me and can be an entry point for someone else. It doesn't do exactly the same as this function, but it rather parses all headers and extracts the HTTP and Content response on it's own array element.
<?php
function http_parse_response($header) {
$retVal = array();
$fields = explode("\r\n", preg_replace('/\x0D\x0A[\x09\x20]+/', ' ', $header));
foreach ($fields as $field) {
// Do not process empty cubrid_num_fields(result)
if (empty($field)) {
continue;
}
if (preg_match('/([^:]+): (.+)/m', $field, $match)) {
$match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1])));
if( isset($retVal[$match[1]]) ) {
if (!is_array($retVal[$match[1]])) {
$retVal[$match[1]] = array($retVal[$match[1]]);
}
$retVal[$match[1]][] = $match[2];
}
else {
$retVal[$match[1]] = trim($match[2]);
}
}
else {
if (preg_match('/HTTP\//', $field)) {
// Following HTTP standards which are space-separated
preg_match('/(.*?) (.*?) (.*)/', $field, $matches);
$retVal['HTTP']['version'] = $matches[1];
$retVal['HTTP']['code'] = $matches[2];
$retVal['HTTP']['reason'] = $matches[3];
}
else {
$retVal['Content'][] = $field;
}
}
}
return $retVal;
}
?>
http_parse_message
(PECL pecl_http >= 0.12.0)
http_parse_message — Analizar mensajes HTTP
Descripción
object http_parse_message
( string
$message
)
Analiza el mensaje (parámetro message) y devuelve
una estructura de tipo object simple recursivo.
Parámetros
-
message -
string que contiene un único mensaje HTTP, y varios mensajes HTTP consecutivos
Valores devueltos
Devuelve una estructura de tipo object jerárquica de los mensajes analizados.
Ejemplos
Ejemplo #1 Uso de http_parse_message()
<?php
define ('URL', 'http://www.example.com/');
print_r(http_parse_message(http_get(URL, array('redirect' => 3))));
?>
El resultado del ejemplo sería algo similar a:
stdClass object
(
[type] => 2
[httpVersion] => 1.1
[responseCode] => 200
[headers] => Array
(
[Content-Length] => 3
[Server] => Apache
)
[body] => Hi!
[parentMessage] => stdClass object
(
[type] => 2
[httpVersion] => 1.1
[responseCode] => 302
[headers] => Array
(
[Content-Length] => 0
[Location] => ...
)
[body] =>
[parentMessage] => ...
)
)
Ariel ¶
2 months ago
