shell - tutorial - para que sirve elastic search
Curl para devolver el código de estado http junto con la respuesta (8)
Encontré esta pregunta porque quería AMBAS la respuesta y el contenido para agregar un manejo de errores para el usuario.
Puede imprimir el código de estado HTTP para eliminar y escribir el contenido en otro archivo.
curl -i http://localhost
Esto le permite usar la lógica para decidir si vale la pena procesar la respuesta.
curl -v http://localhost
Utilizo curl para obtener encabezados http para encontrar el código de estado http y también devolver la respuesta. Obtengo los encabezados http con el comando
curl -I http://localhost
Para obtener la respuesta, uso el comando
curl http://localhost
Tan pronto como use el indicador -I, solo obtengo los encabezados y la respuesta ya no está allí. ¿Hay alguna manera de obtener la respuesta http y los encabezados / código de estado http en un solo comando?
Este comando
curl http://localhost -w ", %{http_code}"
obtendrá el cuerpo y el estado separados por comas; puedes dividirlos para sacarlos.
Puede cambiar el delimitador a su gusto.
He usado esto:
request_cmd="$(curl -i -o - --silent -X GET --header ''Accept: application/json'' --header ''Authorization: _your_auth_code=='' ''https://example.com'')"
Para obtener el estado HTTP
http_status=$(echo "$request_cmd" | grep HTTP | awk ''{print $2}'')
echo $http_status
Para obtener el cuerpo de respuesta, he usado esto
output_response=$(echo "$request_cmd" | grep body)
echo $output_response
La opción
-i
es la que desea:
curl -s -o response.txt -w "%{http_code}" http://example.com
-i, --include Incluir encabezados de protocolo en la salida (H / F)
Alternativamente, puede usar la opción detallada:
http_response=$(curl -s -o response.txt -w "%{http_code}" http://example.com)
if [ $http_response != "200" ]; then
# handle error
else
echo "Server returned:"
cat response.txt
fi
-v, --verbose Hacer que la operación sea más comunicativa
Para uso programático, uso lo siguiente:
curlwithcode() {
code=0
# Run curl in a separate command, capturing output of -w "%{http_code}" into statuscode
# and sending the content to a file with -o >(cat >/tmp/curl_body)
statuscode=$(curl -w "%{http_code}" /
-o >(cat >/tmp/curl_body) /
"$@"
) || code="$?"
body="$(cat /tmp/curl_body)"
echo "statuscode : $statuscode"
echo "exitcode : $code"
echo "body : $body"
}
curlwithcode https://api.github.com/users/tj
Muestra el siguiente resultado:
statuscode : 200
exitcode : 0
body : {
"login": "tj",
"id": 25254,
...
}
Pude obtener una solución mirando el curl doc que especifica el uso, para que la salida obtenga la salida stdout.
curl -o - http://localhost
Para obtener la respuesta solo con el código de retorno http, podría hacer
curl -o /dev/null -s -w "%{http_code}/n" http://localhost
Uso este comando para imprimir el código de estado sin ningún otro resultado.
Además, solo realizará una solicitud HEAD y seguirá la redirección (respectivamente
-I
y
-L
).
curl -o -I -L -s -w "%{http_code}" http://localhost
Esto hace que sea muy fácil verificar el código de estado en un script de salud:
sh -c ''[ $(curl -o -I -L -s -w "%{http_code}" http://localhost) -eq 200 ]''
el modo detallado te dirá todo
curl -v http://localhost