Zawsze zakładałem, że kiedy curl otrzymał odpowiedź HTTP 500, zwracał kod wyjścia, który oznaczał błąd (! = 0), ale wydaje się, że tak nie jest.
Czy istnieje sposób, w jaki mogę sprawić, że cURL nie powiedzie się z kodem wyjścia innym niż 0, jeśli kod stanu HTTP nie ma wartości 200? Wiem, że mogę użyć, -w "%{http_code}"
ale to umieszcza go w STDOUT, nie jako kod wyjścia (poza tym, jestem również zainteresowany przechwytywaniem danych wyjściowych, których nie chcę przekierowywać do pliku, ale na ekran).
curl -f -L
i zobacz to pytanie, aby uzyskać szczegółowe informacje na temat tego, co-L
działaJeśli chcesz tylko wyświetlić zawartość zwiniętej strony, możesz to zrobić:
Spowoduje to zapisanie zawartości strony do STDERR podczas pisania kodu stanu HTTP do STDOUT, dzięki czemu można go przypisać do zmiennej STATUSCODE .
źródło
0
ze skryptu kod inny niż status?if [ "$statuscode" -ne 200 ]; then exit "$statuscode"; fi
?{ code=$(curl ... as above ...); } 2>&1
sztuczka polega na{ ... } 2>&1
tym, że pozwala na przekierowanie, ale nie powoduje odrodzenia innej powłoki, jak( ... )
by to było.Byłem w stanie to zrobić za pomocą kombinacji flag:
curl --silent --show-error --fail URL
--silent ukrywa postęp i błąd
--show-error pokazuje komunikat o błędzie ukryty przez
--silent
--fail zwraca kod wyjścia> 0, gdy żądanie nie powiedzie się
źródło
--silent --show-error --fail
działa tak samo jak tylko-f/--fail
.--fail
zwraca kod wyjścia22
, jak udokumentowano .Tak, jest na to sposób, ale nie jest to oczywiste, ponieważ obejmuje 3 opcje zwijania:
To gwarantuje, że sukces (0) nastąpi tylko wtedy, gdy zwiniesz nas końcowym
2xx
kodem powrotu istdout
otrzymamy treść, a wszelkie błędy zostaną wyświetlone stderr.Należy pamiętać, że dokumentacja curl może nieco cię pomylić, ponieważ wspomina, że --fail może się powieść dla około 401 kodów. Na podstawie testów, które nie są prawdziwe, a przynajmniej nie w przypadku jednoczesnego użycia z --show-error.
Do tej pory nie byłem w stanie znaleźć żadnego przypadku, w którym curl zwróci sukces, gdy nie byłoby HTTP z tymi opcjami.
źródło