Gdy test curl wypisuje 000 jako status HTTP, oznacza to, że nie uzyskał końcowego kodu odpowiedzi HTTP, który mógłby podać. Strona nie wysłała rzeczywistego statusu HTTP o nazwie 000.

Zapisz także błąd

Ten przykład dla powłoki POSIX wypisuje końcowe pole HTTP, pole CONNECT oraz kod zakończenia procesu curl:

curl --proxy http://203.0.113.10:8080 --noproxy '' --connect-timeout 5 --max-time 15 --silent --show-error --output /dev/null --write-out 'http=%{http_code} connect=%{http_connect}\n' https://example.com/
result=$?
printf 'curl_exit=%s\n' "$result"

Zastąp przykładowy punkt końcowy swoim proxy HTTP albo kandydatem z listy proxy HTTP. Pozostaw włączone show-error: komunikat błędu często jest najbardziej przydatny. Pole CONNECT ma znaczenie przy korzystaniu z tunelu; nie jest drugim końcowym statusem strony.

Odczytaj wartości łącznie

  • Nieudane połączenie z proxy może pozostawić w polu HTTP wartość 000.
  • Przekroczenie limitu czasu przed otrzymaniem odpowiedzi może dać taki sam wynik.
  • Udana odpowiedź CONNECT, po której wystąpi błąd TLS, może dać connect=200 i http=000.
  • Pełna odpowiedź strony, taka jak 403, to inna sytuacja: istnieje rzeczywista odpowiedź HTTP do zbadania.

Dokładny kod zakończenia i komunikat zawężają przyczynę. Sprawdź, czy problem wystąpił podczas odnajdywania proxy, łączenia z jego portem, negocjowania tunelu czy weryfikowania celu.

Nie sprowadzaj każdego wyniku do sprawdzenia statusu

Skrypt zapisujący tylko http_code odrzuca błąd transportu. Zapisuj też wynik procesu i komunikat błędu pozbawiony poufnych danych. Z drugiej strony curl może pomyślnie zakończyć transfer, mimo że strona zwróci status błędu, chyba że użyjesz odpowiedniej opcji fail. Odpowiedź HTTP i wynik wykonania klienta odpowiadają na różne pytania.

Nie próbuj naprawiać 000 przez wyłączenie weryfikacji TLS ani dodanie przypadkowego nagłówka. Najpierw ustal, która operacja nie dotarła do końcowej odpowiedzi.

Powiązane artykuły