#php #xml #curl
Вопрос:
Я использую приведенный ниже запрос curl, который возвращает структурированный ответ XML. Однако ответ кажется неправильным (первая строка: строка(744978) » Обычно я кодирую его json_decode, однако это, похоже, не работает. Это проблема в конечной точке или я делаю что-то не так? Я хотел бы преобразовать ответ в массив, чтобы я мог сохранить его в базе данных.
запрос
$url = 'url';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
Комментарии:
1. Вы спрашиваете конечную точку, которая предоставляет XML, а не JSON. Вам либо нужно обработать ответ в формате XML (например, с php.net/manual/en/book.simplexml.php ) или попросите конечную точку отправить JSON, если она его поддерживает (например, с дополнительным
Accept
заголовком HTTP).2. Замечательно! Это именно то, что мне было нужно. Решением было преобразовать XML в JSON с помощью: $ch = curl_init($url); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $результат = curl_exec($ch); $xml = simplexml_load_string($результат); $json = json_encode($xml); $массив = json_decode($json,TRUE); curl_close($ch);
3.
string(744978) "
было ли это связано с использованием чего-то вродеvar_dump
вывода результатов на экран или на самом деле в ответе?
Ответ №1:
используйте эту функцию для получения таких результатов, как
$url = 'url';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
$result = api_result($result);
curl_close($ch);
function api_result($result){
$plainXML = $this->mungXML($result);
$arrayResult = json_decode(json_encode(SimpleXML_Load_String($plainXML, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $arrayResu<
}
<!-- begin snippet: js hide: false console: true babel: false -->
Комментарии:
1. пожалуйста, также включите эту функцию
Ответ №2:
функция xml_to_json_feed() {
$url = 'http://x';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
$xml = simplexml_load_string($result);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
curl_close($ch);
возвращает $массив;
}