Estoy tratando de extraer datos usando CURL en PHP como este
$ch = curl_init(); $headers = array('Content-type: text/xml',"openapikey:da21d9s56ekr33"); curl_setopt($ch, CURLOPT_URL, "http://api.test.co.un/rest/cateservice/category"); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_FAILONERROR,1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT, 15); $return = curl_exec($ch); print_r($return); print_r(gettype($return)); //prints stringpero obtuve la respuesta en la cadena completa cuando se suponía que la respuesta estaba en formato xml, y cuando imprimo el tipo de la variable de respuesta, imprime la cadena. Intenté usar Postman para verificar la respuesta y devuelve el formato correcto en modo XML:
y cuando cambio al modo de vista previa en Postman, mostró el mismo resultado que mi respuesta CURL en php, que es una cadena completa:
lo más probable es que esté obteniendo la respuesta correcta, es solo que su navegador no lo muestra de la manera que esperaba. ¿Qué sucede si, en la parte superior de su código, agrega header("content-type: text/plain;charset=utf8"); ? Supongo que representará el código de la forma que esperabas. alternativamente, codificarlo en html, como
function hhb_tohtml(string $str):string { return htmlentities($str, ENT_QUOTES | ENT_HTML401 | ENT_SUBSTITUTE | ENT_DISALLOWED, 'UTF-8', true); } print_r(hhb_tohtml($return)); print_r(gettype($return)); //prints string