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 — Analyse un message HTTP
Description
object http_parse_message
( string
$message
)
Analyse le message HTTP dans un
objet simple récursif.
Liste de paramètres
-
message -
chaîne contenant un message HTTP simple ou plusieurs messages HTTP consécutifs
Valeurs de retour
Retourne une structure d'objets hiérarchiques des messages analysés.
Exemples
Exemple #1 Exemple avec http_parse_message()
<?php
define ('URL', 'http://www.example.com/');
print_r(http_parse_message(http_get(URL, array('redirect' => 3))));
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
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
