Модификация универсального примера кода REST Helper PHP для поддержки XML DOM - PullRequest
0 голосов
/ 02 июня 2010

Я нашел этот пример исходного кода PHP на HTTP POST от PHP, без cURL

Мне нужна помощь в изменении примера исходного кода PHP для поддержки XML DOM для управления API REST.

Я подумал, что если я обновлю оператор CASE для раздела XML ниже с

$r = simplexml_load_string($res);

до

$r = new DOMDocument();
$r->load($res);

что это будет работать, но это не так. (

Любая помощь будет оценена.

function rest_helper($url, $params = null, $verb = 'GET', $format = 'xml')
{
  $cparams = array(
    'http' => array(
      'method' => $verb,
      'ignore_errors' => true
    )
  );
  if ($params !== null) {
    $params = http_build_query($params);
    if ($verb == 'POST') {
      $cparams['http']['content'] = $params;
    } else {
      $url .= '?' . $params;
    }
  }

  $context = stream_context_create($cparams);
  $fp = fopen($url, 'rb', false, $context);
  if (!$fp) {
    $res = false;
  } else {
    // If you're trying to troubleshoot problems, try uncommenting the
    // next two lines; it will show you the HTTP response headers across
    // all the redirects:
    // $meta = stream_get_meta_data($fp);
    // var_dump($meta['wrapper_data']);
    $res = stream_get_contents($fp);
  }

  if ($res === false) {
    throw new Exception("$verb $url failed: $php_errormsg");
  }

  switch ($format) {
    case 'json':
      $r = json_decode($res);
      if ($r === null) {
        throw new Exception("failed to decode $res as json");
      }
      return $r;

    case 'xml':
      $r = simplexml_load_string($res);
      if ($r === null) {
        throw new Exception("failed to decode $res as xml");
      }
      return $r;
  }
  return $res;
}

1 Ответ

0 голосов
/ 02 июня 2010

Правильная форма:

$r = new DOMDocument();
$r->loadXML($res);

См. Документацию для DOMDocument :: loadXML Метод DOMDocument::load() загружается из файла.

...