Tengo una función de clase para interactuar con la API RESTful para Last.FM - su propósito es obtener las pistas más recientes para mi usuario. Aquí está:Error PHP cURL: "Respuesta vacía del servidor"
private static $base_url = 'http://ws.audioscrobbler.com/2.0/';
public static function getTopTracks($options = array())
{
$options = array_merge(array(
'user' => 'bachya',
'period' => NULL,
'api_key' => 'xxxxx...', // obfuscated, obviously
), $options);
$options['method'] = 'user.getTopTracks';
// Initialize cURL request and set parameters
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => self::$base_url,
CURLOPT_POST => TRUE,
CURLOPT_POSTFIELDS => $options,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_TIMEOUT => 30,
CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'
));
$results = curl_exec($ch);
return $results;
}
Esto devuelve "Empty reply from server"
. Sé que algunos han sugerido que este error proviene de algún fallo en la infraestructura de la red; No creo que esto sea cierto en mi caso. Si ejecuto una solicitud de cURL a través de la línea de comando, obtengo mis datos; el servicio Last.FM está activo y accesible.
Antes de ir con esa gente y ver si algo ha cambiado, quería consultar con ustedes y ver si hay algún problema en mi código que podría estar causando esto.
Gracias!
RESPUESTA: @ Jan Kuboschek me ayudó a darme cuenta de lo que está (tal vez) sucediendo aquí. Al proporcionar CURLOPT_POSTFIELDS
una matriz asociativa, se especifica un tipo de contenido particular que puede no funcionar con ciertos servicios RESTful. Una solución más inteligente es crear manualmente una versión con codificación URL de esa información y pasarla como CURLOPT_POSTFIELDS
.
Para obtener más información, echa un vistazo a: http://www.brandonchecketts.com/archives/array-versus-string-in-curlopt_postfields
Lamentablemente, ese no es el problema: actualicé mi publicación original para mostrar la URL ($ base_url) que uso. Gracias, sin embargo. : - \ – ABach
Actualicé mi respuesta. Avísame si esto aún no funciona. No pude probar más ya que el servidor me dijo que necesitaba una clave API válida. –
De acuerdo, lo intenté, parece colgarse ("trabajar") un poco más. I var volcar los resultados de curl_exec y obtener 'falso' a cambio ... Prefiero no sacar mi clave de API, pero son lo suficientemente fáciles de obtener. – ABach