Якщо тест curl виводить HTTP-статус 000, він не отримав остаточного коду HTTP-відповіді, який міг би повідомити. Сайт не надсилав справжнього HTTP-статусу з назвою 000.

Збережіть також помилку

Цей приклад для POSIX-оболонки виводить підсумкове HTTP-поле, поле CONNECT і код завершення процесу 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"

Замініть адресу з прикладу своїм HTTP-проксі або кандидатом зі списку HTTP-проксі. Залиште show-error увімкненим: повідомлення про помилку часто є найкориснішим. Поле CONNECT має значення, коли використовується тунель; це не другий остаточний статус сайту.

Читайте значення разом

  • Невдале з’єднання з проксі може залишити в HTTP-полі 000.
  • Тайм-аут до отримання відповіді може дати такий самий результат.
  • Успішна відповідь CONNECT, після якої стається помилка TLS, може дати connect=200 і http=000.
  • Повна відповідь сайту, наприклад 403, — інша ситуація: є справжня HTTP-відповідь для перевірки.

Точний код завершення та повідомлення звужують коло причин. З’ясуйте, чи помилка виникла під час пошуку проксі, з’єднання з його портом, узгодження тунелю або перевірки цілі.

Не зводьте кожен результат лише до перевірки статусу

Скрипт, який зберігає тільки http_code, втрачає транспортну помилку. Зберігайте також результат процесу й повідомлення про помилку з вилученими конфіденційними даними. І навпаки: curl може успішно завершити передавання, хоча сайт повертає помилковий статус, якщо не використано відповідну опцію fail. HTTP-відповідь і результат виконання клієнта відповідають на різні запитання.

Не намагайтеся виправити 000 вимкненням перевірки TLS або додаванням випадкового заголовка. Спочатку визначте, яка операція так і не дійшла до остаточної відповіді.

Схожі статті