Curl código de saída para solicitações HTTP com falha
Normalmente, se um recurso HTTP solicitado não estiver disponível, um servidor da Web responderá com um documento HTML correspondente ao código de status HTTP relevante, por exemplo, 404. Nesses casos, o curl aceita esse documento do servidor e, como conseguiu obter uma resposta do servidor da Web, exibe o documento de erro e sai com um status 0 para obter êxito.
Você deseja que curl
retorne um código de erro se houver um problema ao recuperar o recurso HTTP. Para isso, você precisa fornecer a opção -f, --fail
para curl. A partir da página do manual curl:
Fail silently (no output at all) on server errors. This is mostly done to better enable scripts etc to better deal with failed attempts. In normal cases when an HTTP server fails to deliver a document, it returns an HTML document stating so (which often also describes why and more). This flag will prevent curl from outputting that and return error 22.
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).
Nota: o texto acima é (principalmente) copiado da minha resposta para sua pergunta semelhante sobre o curl .
Enviando e-mail
Você pode usar o programa mail
para enviar e-mail. Em sistemas baseados em Debian, ele pode
ser instalado através do pacote mailutils
enquanto estiver nas distribuições baseadas no Red Hat,
é fornecido pelo pacote mailx
.
echo "Body of email" | mail [email protected] -s "Subject line"
Se você já usa um cliente de e-mail da linha de comando, como mutt
, pode usar:
echo "Body of email" | mutt [email protected] -s "Subject line"
Testando o sucesso de um comando
Ao testar a saída de um comando, você não precisa usar test
ou [
. Você pode simplesmente usar a saída do comando como no script a seguir (que incorpora todos os itens acima):
httpUrl="http://some.website.ashx"
if balExp=$(curl -f -v -X POST -d "UID=test&PWD=2222" "$httpUrl"); then
echo "$balExp" | mail [email protected] -s "Successful download of $httpUrl"
else
echo "$balExp" | mail [email protected] -s "Problem downloading $httpUrl"
fi
Note que eu citei a variável shell, $httpUrl
usando aspas duplas para que o script trabalhe com outras URLs que podem conter caracteres que são interpretados pelo shell ( &
sendo um comum). / p>
Por fim, a declaração if
em sua pergunta não continha o then
correspondente.