Use delivered content-type to parse XML_XRD

In issue #205 we saw data coming in with an additional line-break before
the JSON data which fuzzed the auto-detection in XML_XRD (which assumed
a { as the first character). If we use the Content-type header from HTTP
we can avoid that issue.
This commit is contained in:
Mikael Nordfeldth 2016-07-02 13:44:25 +02:00
parent cfd9aee57b
commit 3987cad9b7
1 changed files with 15 additions and 1 deletions

View File

@ -122,8 +122,22 @@ class Discovery
throw new Exception('Unexpected HTTP status code.');
}
$xrd->loadString($response->getBody());
switch ($response->getHeader('content-type')) {
case self::JRD_MIMETYPE_OLD:
case self::JRD_MIMETYPE:
$type = 'json';
break;
case self::XRD_MIMETYPE:
$type = 'xml';
break;
default:
// fall back to letting XML_XRD auto-detect
common_debug('No recognized content-type header for resource descriptor body.');
$type = null;
}
$xrd->loadString($response->getBody(), $type);
return $xrd;
} catch (Exception $e) {
common_log(LOG_INFO, sprintf('%s: Failed for %s: %s', _ve($class), _ve($uri), _ve($e->getMessage())));
continue;