Ich erstelle einen API-Endpunkt in PHP und habe eine Seite, die JSON ausgibt, nennen wir es example.com/stats
. Wenn ein Benutzer versucht, die Daten zurückzugeben, ist er nur erfolgreich, wenn er file_get_contents()
verwendet. Wenn Benutzer versuchen, ihn mithilfe von cURL zu erreichen, erhalten sie eine NULL-Antwort. Wie sollte ich JSON-Daten in PHP bereitstellen, so dass es sowohl mit file_get_contents als auch mit curl kompatibel ist?Seite lesbar von file_get_contents, aber nicht cURL
Weitere Informationen unten.
SOURCE für/stats
header('Content-type: application/json');
echo '{"status":"error", "message":"invalid operation"}';
Wenn ich versuche, diese Seite von einem anderen Server zu lesen über file_get_contents()
alles funktioniert.
function fgc($receive_url){
$fgc = json_decode(file_get_contents($receive_url), true);
return $fgc;
}
$out = fgc("https://example.com/stats");
var_dump($out);
//returns: array(2) { ["status"]=> string(5) "error" ["message"]=> string(17) "invalid operation" }
Wenn ich versuche, das gleiche zu tun, sondern mit cURL ich NULL
.
function curlit($receive_url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $receive_url);
$ccc = curl_exec($ch);
$json = json_decode($ccc, true);
return $json;
}
$out = curlit("https://example.com/stats");
var_dump($out);
Bitte beachten Sie andere Websites, die JSON funktionieren mit meiner cURL-Funktion angezeigt wird, ist es insbesondere die Daten, die ich von example.com/stats
dienen würde, die bei der Verwendung von cURL ausfällt. Ich dachte, die Verwendung der Header-Anwendung/json würde ausreichen, um diese Daten über cURL erreichbar zu machen. Irgendwelche Ideen, was auf der Servierseite falsch sein könnte? Warum würde die Datei funktionieren, aber nicht locken? Vielleicht zeigt cURL ein Ergebnis an, bevor die Seite geladen wird? Ich habe versucht, die Anwendung/JSON-Header zu entfernen, aber das machte keinen Unterschied.
Ist es eine http oder https-URL? – theomessin
HTTPS. SSL auf 'example.com' ist aktiv und wird durch cloudflare aktiviert. – m1xolyd1an
Können Sie versuchen, die CLI-Version von cURL zu verwenden und sehen, ob das funktioniert? – theomessin