我从服务器发送了以下响应。如何将字符串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
答案 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]等访问您的值。