Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]Curl i obsługa błędów. Jak rozpoznać error?
starterrrrr
post 17.02.2020, 16:40:58
Post #1





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 7.01.2015

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
nospor
post 17.02.2020, 16:52:35
Post #2





Grupa: Moderatorzy
Postów: 35 209
Pomógł: 5918
Dołączył: 27.12.2004




No to sparsuj sobie ten xml wpierw i bedziesz widzial czy ma blad czy nie


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
starterrrrr
post 18.02.2020, 09:51:32
Post #3





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 7.01.2015

Ostrzeżenie: (0%)
-----


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ł.
Go to the top of the page
+Quote Post
nospor
post 18.02.2020, 09:55:15
Post #4





Grupa: Moderatorzy
Postów: 35 209
Pomógł: 5918
Dołączył: 27.12.2004




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


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
adbacz
post 20.02.2020, 19:14:34
Post #5





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 5.04.2020 - 01:00