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:
<?xml version="1.0" encoding="UTF-8" ?><gateway><error><code>8</code><message>excessive usage</message></error></gateway>
// wykonujemy request $url = 'https://DOMENA/gateway.php'; $curl = curl_init(); $file = http://www.php.net/fopen("xml/".$file_name, 'w'); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_FILE, $file); #output curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); $result = curl_exec($curl); $err = curl_error($curl); $errno = http://www.php.net/intval(curl_errno($curl)); curl_close($curl); http://www.php.net/fclose($file); // sprawdzamy odpowiedz if (!$err) { return http://www.php.net/htmlspecialchars($result); } else { http://www.php.net/var_dump($err, $errno); }
No to sparsuj sobie ten xml wpierw i bedziesz widzial czy ma blad czy nie
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
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.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)