რატომ რჩება shell-ის პროქსის შემოწმება წარუმატებლად curl-ის წარმატების შემდეგ
მოერიდეთ ძველი curl-ის წარუმატებლობის შენახვას shell-ის ცვლადში მას შემდეგ, რაც შემდგომი პროქსის შემოწმებები წარმატებით დასრულდება.
პროქსი ერთხელ ვარდება. შემდგომი მოთხოვნები წარმატებით სრულდება, მაგრამ მეთვალყურე კვლავ აცხადებს კიდევ ერთ წარუმატებლობას. შეამოწმეთ, დაიმახსოვრა თუ არა სკრიპტმა გუშინდელი გასვლის სტატუსი.
ეს ნიმუში ცვლადს აახლებს მხოლოდ მაშინ, როცა curl ვარდება:
status=0
# Repeated inside a loop:
curl ... || status=$?
პირველი არანულოვანი შედეგის შემდეგ წარმატებული გამეორება status-ს უცვლელად ტოვებს. ის ნული არ ხდება მხოლოდ იმიტომ, რომ curl წარმატებით დასრულდა.
ამის ნაცვლად დატოტვეთ მიმდინარე ბრძანებაზე:
if curl --proxy socks5h://127.0.0.1:1080 --noproxy '' \
--fail --silent --show-error --connect-timeout 3 --max-time 10 \
https://health.example/ >/dev/null; then
echo "check succeeded"
else
echo "check failed"
fi
მისამართი და დროები საილუსტრაციოა. ეს აშორებს მოძველებულ ცვლადს; ის არ წყვეტს, რომელი აღდგენითი ქმედებაა მიზანშეწონილი.
შეინარჩუნეთ დაკვირვება ვიწრო. მოთხოვნა დამოკიდებულია პროქსიზე, შემდგომ მარშრუტზე, დანიშნულებაზე, TLS-ის შემოწმებასა და HTTP-ის შედეგზე. სამიზნის შეფერხებამ შეიძლება ის ჩააგდოს, მაშინ როცა SOCKS სერვისი ჯანმრთელია. მოულოდნელმა HTTP 200 გვერდმა ასევე შეიძლება გაიაროს მხოლოდ სტატუსზე დაფუძნებული შემოწმება მოსალოდნელი შიგთავსის მიწოდების გარეშე.
აირჩიეთ კონტროლირებადი პასუხის კონტრაქტი და შეინარჩუნეთ წარუმატებლობის ეტაპი. პროქსის გადატვირთვა ყოველ არანულოვან curl-ის შედეგზე შეიძლება ჯანმრთელი სესიები დაარღვიოს, ნამდვილი დანიშნულების პრობლემა კი ხელუხლებელი დარჩეს.