Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Curl i obsługa błędów. Jak rozpoznać error?
Forum PHP.pl > Forum > PHP
starterrrrr
Witam.

Mam pewien problem z pobieraniem xml'a z pewnego serwisu.,
Serwis ten ma limity czasowe na różne rodzaje plików.

Chciałem wykryć, kiedy zwraca mi poprawny plik xml a kiedy komunikat w formie xml'a

Komunikat z informacją o błędzie wygląda tak:
  1. <?xml version="1.0" encoding="UTF-8" ?><gateway><error><code>8</code><message>excessive usage</message></error></gateway>



kod, którym pobieram plik. Niestety funkcja curl_error() nie wykrywa tutaj błędu.

  1.  
  2. // wykonujemy request
  3. $url = 'https://DOMENA/gateway.php';
  4. $curl = curl_init();
  5. $file = fopen("xml/".$file_name, 'w');
  6. curl_setopt($curl, CURLOPT_URL, $url);
  7. curl_setopt($curl, CURLOPT_POST, true);
  8. curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
  9. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  10. curl_setopt($curl, CURLOPT_FILE, $file); #output
  11. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  12. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
  13.  
  14. $result = curl_exec($curl);
  15. $err = curl_error($curl);
  16. $errno = intval(curl_errno($curl));
  17. curl_close($curl);
  18. fclose($file);
  19.  
  20.  
  21. // sprawdzamy odpowiedz
  22. if (!$err) {
  23. return htmlspecialchars($result);
  24. } else {
  25. var_dump($err, $errno);
  26.  
  27. }


Jak mogę rozpoznać, żeskrypt pobrał xml z komunikatem błędu a nie zwykły xml?
nospor
No to sparsuj sobie ten xml wpierw i bedziesz widzial czy ma blad czy nie
starterrrrr
Cytat(nospor @ 17.02.2020, 16:52:35 ) *
No to sparsuj sobie ten xml wpierw i bedziesz widzial czy ma blad czy nie


Docelowy plik ma po 300MB bedzie problem ze sparsowaniem tylko żeby sprawdzić czy pobrał się dobry. Myślałem, że Curl taki błąd/wyjątek bedzie monitorował.
nospor
curl monitoruje naglowki. Jesli stronka nie zwraca bledu w naglowkach tylko zwraca naglowek 200 OK no to sorry, dla curl to jests ok. Sprawdzales w ogole jakie naglowki dostajesz w zwrotce?

Skoro wiec docelowy plik jest bardzo duzy to sprawdzaj poprostu rozmiar zwroconego tekstu i juz
adbacz
Ale czekaj... Plik docelowy ma 300MB, ale plik z błędem będzie miał raptem kilka kb. Sprawdź jego rozmiar, jak będzie jakiś dziwny, to załóż, że to błąd i wykonaj akcje.

Jednak tak jak pisze @nospor, albo serwer powinien zwrócić nagłówek w odpowiednik kodzie, albo response serwera powinien być w jakimś innym typie zamiast XML. Albo nawet właśnie XML z treścią błędu, ale razem z nagłówkiem. Poza tym nie przejmuj się wielkością pliku, wbudowany parser XML w PHP jest dość wydajny, powinien bez problemu sobie z tym poradzić - zawsze możesz to zweryfikować czy sparsuje na docelowym serwerze.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.