Curl gibi bir komutun hatasız tamamlanıp tamamlanmadığı kontrol edilir


24

Bir dosyayı HTTP postasıyla sunucuya yüklemek için curl kullanıyorum.

curl -X POST -d@myfile.txt server-URL

Bu komutu komut satırında manuel olarak çalıştırdığımda, sunucudan gibi bir yanıt alıyorum "Upload successful". Ancak, bu curl komutunu bir komut dosyası üzerinden yürütmek istersem POST isteğimin başarılı olup olmadığını nasıl öğrenebilirim?

Yanıtlar:


21

En basit yol, yanıtı saklamak ve karşılaştırmaktır:

$ response=$(curl -X POST -d@myfile.txt server-URL);
$ if [ "Upload successful" == "${response}" ]; then … fi;

Bunu test etmedim. Sözdizimi kapalı olabilir, ancak fikir bu. Kıvrımın çıkış kodunu veya benzeri şeyleri kontrol etmenin daha karmaşık yolları olduğuna eminim.

güncelleştirme

curlepeyce çıkış kodları döndürür. Başarısız bir gönderiyle sonuçlanabileceğini tahmin ediyorum. 55 Failed sending network data.Dolayısıyla, $?( Expands to the exit status of the most recently executed foreground pipeline.) ile karşılaştırarak çıkış kodunun sıfır olduğundan emin olabilirsiniz :

$ curl -X POST -d@myfile.txt server-URL;
$ if [ 0 -eq $? ]; then … fi;

Veya komutunuz nispeten kısaysa ve başarısız olduğunda bir şey yapmak istiyorsanız, koşullu ifadedeki koşul olarak çıkış koduna güvenebilirsiniz:

$ if curl --fail -X POST -d@myfile.txt server-URL; then
    # …(success)
else
    # …(failure)
fi;

Bu formatın sıklıkla tercih edildiğini düşünüyorum ama şahsen daha az okunabilir buluyorum.


20

curl's --failİlk önce bir kez test etmelisiniz, ancak seçeneği kullanabilirsiniz .

man curl

-f, --fail (HTTP) Sunucu hataları üzerinde sessiz (hiç çıktı yok) başarısız. Bu daha çok başarısız komutlarla daha iyi başa çıkmak için komut dosyalarının daha iyi etkinleştirilmesi için yapılır. Normal durumlarda bir HTTP sunucusu bir belge teslim edemediğinde, bunu belirten bir HTML belgesi döndürür (bu genellikle nedenini ve daha fazlasını da açıklar). Bu bayrak kıvrılmayı önlüyor ve 22 numaralı hatayı döndürür.

          This method is not fail-safe and there are occasions where  non-
          successful  response  codes  will  slip through, especially when
          authentication is involved (response codes 401 and 407).

Bu şekilde yapabilecekleriniz:

args="-X POST -d@myfile.txt server-URL"
curl -f $args && echo "SUCCESS!" ||
    echo "OH NO!"
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.