如何在变量中获取http头响应值?

时间:2011-12-23 05:57:32

标签: php http webserver

我从服务器发送了以下响应。如何将字符串www-authenticate的一部分提取到名为$ realm,$ nonce,$ opaque的变量中?

curl请求正在生成以下输出,并且我正在打印响应标头:

HTTP/1.1 401 Unauthorized
Cache-Control: private
Date: Fri, 23 Dec 2011 05:49:41 GMT
Content-Length: 0
Content-Type: text/html
WWW-Authenticate: Digest realm="users@mris.com", nonce="3133323436313933383137343820335916269c13227f30b07bd83a1c7e0d", opaque="6e6f742075736564"
RETS-Version: RETS/1.5
X-Powered-By: Servlet/2.5 JSP/2.1

3 个答案:

答案 0 :(得分:1)

首先,将标头解析为通用数组:

$headers = explode("\n", $headers);
foreach ($headers as $header) {
    list($key, $value) = explode(': ', $header, 2);
    $headers[$key] = $value;
}

然后,使用以下内容解析WWW-Authenticate标题:

$params = array();
preg_match_all('/(\w+)="([^"]+)"/', $headers['WWW-Authenticate'], $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
    $params[$match[1]] = $match[2];
}

答案 1 :(得分:0)

使用函数get_headers http://es2.php.net/get_headers,您可以获得一个包含标题值的数组。

答案 2 :(得分:0)

$headers = getallheaders();
preg_match_all('/\"([^"])*\"/', $headers['WWW-Authenticate'], $matches);
print_r($matches);

这将获取带有getallheaders()的标头,选择您的www-auth,然后通过正则表达式将引号之间的每个值过滤到$ matches数组中。通过$ matches [0]等访问您的值。