file_get_contents: Kein Wert bei Fehler bei API Abfrage

xep22

Banned
Registriert
Apr. 2018
Beiträge
395
Mit der API von openweathermap lese ich das Wetter aus. Das funktioniert soweit auch, hiermit prüfe ich z.B. den HTTP-Statuscode :

PHP:
$json = file_get_contents('https://api.openweathermap.org/data/2.5/forecast?q=Berlin&appid=API_KEY');

echo json_decode($json)->cod;

Ich erhalte 202. Wenn ich aber jetzt in der URL eine Stadt eingebe die es nicht gibt, ist ganz $json einfach leer. Aber rufe ich die URL im Browser auf erhalte ich das:

Code:
{"cod":"404","message":"city not found"}

Wieso kann ich das aber nicht mit PHP auslesen ?
 
Weil es "Code" und nicht "Cod" heißt?
 
Hast du API_KEY auch gegen einen gültigen API-Key ersetzt? Falls nicht ist da dein Problem.

Ansonsten:

file_get_contents() zum Auslesen von URLs zu verwenden ist zwar theoretisch möglich, aber ich würde es nicht empfehlen. Serverseitig ist aus Sicherheitsgründen oft deaktiviert, File-Funktionen für URLs verwenden zu können.

Schau' am besten mal die cURL-Funktionen von PHP an, die sind eher für sowas gedacht und bieten auch mehr Möglichkeiten für die Fehlerbehandlung. https://www.php.net/manual/de/book.curl.php
 
Sephe schrieb:
Weil es "Code" und nicht "Cod" heißt?

Ähm nein? schau das JSON doch an...
Code:
"cod":"404"


sth schrieb:
Hast du API_KEY auch gegen einen gültigen API-Key ersetzt?

Ja... wie geschrieben geht es ja, wenn ich richtige Eingaben mache bei der stadt...
 
Zuletzt bearbeitet:
Versuch es mal mit einem Stream Context als drittes Argument für file_get_contents.
PHP:
$context = stream_context_create([
    'http' => [
        'ignore_errors' => true,
    ],
]);
$json = file_get_contents($url, false, $context);

Ich würde aber auch eher dazu raten curl oder so etwas wie Guzzle zu verwenden.
 
Zuletzt bearbeitet:
du postest hier seit kurzem sehr viele threads, die sich zu 'nem grossteil vermeiden liessen, wenn du mal 'nen blick in die doku werfen wuerdest (https://www.php.net/manual/de/function.file-get-contents.php abschnitt rueckgabewerte. var_dump() doch mal $json), oder dich an die tipps der vorigen threads halten wuerdest (bzgl. cURL). trau dich - die doku ist eigentlich ziemlich gut (inkl. kommentare darunter), insbesondere in hinblick darauf, dass die sprache selbst so inkonsistent ist.

zum thema: file_get_contents() verarbeitet eben den return body nicht, wenn ein http code ausserhalb der 200er/300er range kommt. das macht der browser dahingegen schon. benutz cURL, um das sinnvoll abzufangen.
 
Zurück
Oben