2017-07-04 5 views
0

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.

+0

Ist es eine http oder https-URL? – theomessin

+0

HTTPS. SSL auf 'example.com' ist aktiv und wird durch cloudflare aktiviert. – m1xolyd1an

+0

Können Sie versuchen, die CLI-Version von cURL zu verwenden und sehen, ob das funktioniert? – theomessin

Antwort

1

Antwort hinzugefügt Referenz:

Nach debuging mit OP, fand er heraus, dass example.com eine 301-Weiterleitung wurde die Ausstellung.

Lösung ist zu kräuseln der Umleitung machen folgen, indem Sie die folgende Option hinzu:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
0

Vielleicht ist Ihr Server deaktiviert cURL hat, versuchen Sie es zu überprüfen, mit function_exists:

var_dump(function_exists('curl_version')); 
+0

cURL ist aktiviert, ich bin in der Lage, andere Websites durch die gleiche cURL-Funktion zu erreichen. Es ist speziell 'example.com', das NULL zurückgibt. – m1xolyd1an

Verwandte Themen