Проблема с ответом на PHP cURL

#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);
 

возвращает $массив;
}