Ich habe eine Klassenfunktion, die Schnittstelle mit der RESTful API für Last.FM - Zweck ist es, die neuesten Tracks für meinen Benutzer zu greifen. Hier ist es:PHP CURL Fehler: "Leere Antwort vom Server"
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;
}
Dies gibt "Empty reply from server"
zurück. Ich weiß, dass einige meinen, dass dieser Fehler auf einen Fehler in der Netzwerkinfrastruktur zurückzuführen ist. Ich glaube nicht, dass dies in meinem Fall zutrifft. Wenn ich eine cURL-Anfrage über die Kommandozeile abspiele, bekomme ich meine Daten; Der Last.FM-Dienst ist verfügbar und verfügbar.
Bevor ich zu diesen Leuten gehe und sehe, ob sich etwas geändert hat, wollte ich mit Ihnen nette Leute überprüfen und sehen, ob es ein Problem in meinem Code gibt, das dies verursachen würde.
Danke!
ANTWORT: @Jan Kuboschek half mir dabei zu stolpern, was (vielleicht) hier vor sich geht. Wenn Sie CURLOPT_POSTFIELDS
ein assoziatives Array angeben, wird ein bestimmter Inhaltstyp angegeben, der möglicherweise nicht mit bestimmten RESTful-Diensten funktioniert. Eine intelligentere Lösung besteht darin, eine URL-codierte Version dieser Daten manuell zu erstellen und diese als CURLOPT_POSTFIELDS
weiterzugeben.
Weitere Informationen finden Sie unter: http://www.brandonchecketts.com/archives/array-versus-string-in-curlopt_postfields
Leider ist das nicht das Problem - ich habe meinen ursprünglichen Beitrag aktualisiert, um die URL ($ base_url) anzuzeigen, die ich verwende. Trotzdem danke. : - \ – ABach
Meine Antwort wurde aktualisiert. Lass es mich wissen, wenn das immer noch nicht funktioniert. Ich konnte nicht weiter testen, da der Server mir sagte, dass ich einen gültigen API-Schlüssel brauchte. –
Okay, versuchte das - es scheint ein wenig länger zu hängen ("arbeiten"). Ich var dump die curl_exec Ergebnisse und bekomme 'falsch' im Gegenzug ... Ich würde lieber nicht meine API-Schlüssel, aber sie sind leicht genug zu bekommen. – ABach