Калі тэст 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 або даданнем выпадковага загалоўка. Спачатку вызначце, якая аперацыя так і не дайшла да канчатковага адказу.

Падобныя артыкулы