HTTP hata kodu cURL'deki içeriklerden nasıl ayrılır?


6

Evet, bu HTTP durum kodunun çıktısını almak için kıvrılma almakla ilgilidir ? ama ne yazık ki aynı değil.

Bir komut dosyasında çalıştırmak istiyorum:

curl -qSfsw %{http_code} URL

nerede -fseçenek çıkış kodu bir hata sinyal sıfırdan olmasını sağlar. Başarı üzerine getirilen dosyadan (metinsel) çıktı almak istiyorum, aksi halde hata kodunu kullanmak istiyorum.

Sorun:

  • Yarış koşulları nedeniyle tek bir HTTP isteğinden fazlasını kullanmamalıyım
  • İçeriğin depolanması için geçici bir dosya kullanamıyorum

HTTP dönüş kodunu hala asıl çıktıdan nasıl ayırabilirim?


Sözde kodu:

fetch URL
if http-error then
  print http-error-code
else
  print http-body # <- but without the HTTP status code
endif

Yanıtlar:


16

Geçici bir dosya kullanmanıza gerek yoktur. Aşağıdaki bash betiği snippet'i tek bir istek gönderir ve çıkış kodunu curlve HTTP durum kodunu veya HTTP durum kodunu ve yanıtını uygun şekilde yazdırır .

# get output, append HTTP status code in separate line, discard error message
OUT=$( curl -qSfsw '\n%{http_code}' http://superuser.com ) 2>/dev/null

# get exit code
RET=$?

if [[ $RET -ne 0 ]] ; then
    # if error exit code, print exit code
    echo "Error $RET"

    # print HTTP error
    echo "HTTP Error: $(echo "$OUT" | tail -n1 )"
else
    # otherwise print last line of output, i.e. HTTP status code
    echo "Success, HTTP status is:"
    echo "$OUT" | tail -n1

    # and print all but the last line, i.e. the regular response
    echo "Response is:"
    echo "$OUT" | head -n-1
fi

head -n-1 (son satır hariç hepsini basar) GNU gerektirir, BSD / OS X üzerinde çalışmaz.


OS X için ... head -n-1 ... yerine ... sed \ $ d
Zahnon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.