Cliente de solicitud web de línea de comandos que genera contenido y devuelve un estado de salida distinto de cero si se produce un error 404/etc.

Necesito un comando de Linux para iniciar una solicitud HTTP y:

  • volcar la respuesta HTTP (contenido, no encabezados) en la salida estándar del terminal
  • devolver un estado de error de comando de 0 si la solicitud salió bien (terminó con el código HTTP 200 OK), y distinto de cero en todos los demás casos (404, 500, conexión fallida, etc.)

Gratis, necesita funcionar en la mayoría de las distribuciones de Linux, bonificación para Mac.

curl no parece poder hacer eso, ya que su --failinterruptor evita la salida HTTP.

Idea cruda: un contenedor Bash simple. ¿ Capture la salida en un archivo, verifique el estado HTTP y luego actúe en consecuencia ( catel archivo y rc=0, o simplemente de rc>0otra manera)?
Votado a favor. Simplemente no olvide eliminar su $HEADERScuando haya terminado, o después de un tiempo tendrá muchos archivos temporales :)
¡En cualquier momento! He resuelto muchos problemas similares de esta manera: unas pocas líneas Bash pueden hacer mucho. Y si se trata de una sola línea, a menudo termina como un alias :)

Respuestas (1)

Este pequeño envoltorio bash hace el truco:

#!/bin/bash
# Perform a web request, dump content, and exit with relevant exit code

# Take URL as command-line argument
URL=$1

# Launch HTTP request
HEADERS=`mktemp`
curl --dump-header $HEADERS $URL

# Read the first header (example: HTTP/1.1 200 OK)
HEADER=`head -n 1 $HEADERS`

# Remove temporary file
rm $HEADERS

# Return success if HTTP code OK, or failure for any other HTTP code
if [[ $HEADER == *" 200 "* ]]; then
  exit 0
else
  exit 1
fi

Requiere curl y bash .

Licencia: Dominio público