¿Cómo mido los tiempos de solicitud y respuesta a la vez usando cURL?
Tengo un servicio web que recibe datos en formato JSON, los procesa y luego devuelve el resultado al solicitante.
Quiero medir la solicitud, la respuesta y el tiempo total usando cURL
.
Mi solicitud de ejemplo se ve así:
curl -X POST -d @file server:port
y actualmente mido esto usando el time
comando en Linux:
time curl -X POST -d @file server:port
Sin embargo , el comando de tiempo solo mide el tiempo total , que no es exactamente lo que estoy buscando.
¿ Hay alguna forma de medir los tiempos de solicitud y respuesta utilizando cURL
?
De esta brillante publicación de blog... https://blog.josephscott.org/2011/10/14/timing-details-with-curl/
cURL admite salida formateada para los detalles de la solicitud (consulte la página de manual de cURL para obtener más detalles , en -w, –write-out <format>
). Para nuestros propósitos, nos centraremos únicamente en los detalles de tiempo que se proporcionan. Los tiempos siguientes están en segundos .
Cree un nuevo archivo
curl-format.txt
y péguelo:time_namelookup: %{time_namelookup}s\n time_connect: %{time_connect}s\n time_appconnect: %{time_appconnect}s\n time_pretransfer: %{time_pretransfer}s\n time_redirect: %{time_redirect}s\n time_starttransfer: %{time_starttransfer}s\n ----------\n time_total: %{time_total}s\n
Haga una solicitud:
curl -w "@curl-format.txt" -o /dev/null -s "http://wordpress.com/"
O en Windows, es...
curl -w "@curl-format.txt" -o NUL -s "http://wordpress.com/"
Qué hace esto:
-w "@curl-format.txt"
le dice a cURL que use nuestro archivo de formato
-o /dev/null
redirige la salida de la solicitud a /dev/null
-s
le dice a cURL que no muestre un medidor de progreso
"http://wordpress.com/"
en la URL que estamos solicitando. Utilice comillas, especialmente si su URL tiene parámetros de cadena de consulta "&".
Y esto es lo que obtienes:
time_namelookup: 0.001s
time_connect: 0.037s
time_appconnect: 0.000s
time_pretransfer: 0.037s
time_redirect: 0.000s
time_starttransfer: 0.092s
----------
time_total: 0.164s
Todavía no he visto una opción para generar los resultados en microsegundos, pero si conoce alguna, publíquela en los comentarios a continuación.
Crear un acceso directo para Linux/Mac (alias)
alias curltime="curl -w \"@$HOME/.curl-format.txt\" -o /dev/null -s "
Entonces puedes simplemente llamar...
curltime wordpress.org
¡Gracias al comentarista Pete Doyle!
Crear un script independiente para Linux/Mac
Este script no requiere un .txt
archivo separado para contener el formato.
Cree un nuevo archivo, curltime
en algún lugar de su ruta ejecutable y péguelo:
#!/bin/bash
curl -w @- -o /dev/null -s "$@" <<'EOF'
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_redirect: %{time_redirect}\n
time_starttransfer: %{time_starttransfer}\n
----------\n
time_total: %{time_total}\n
EOF
Luego llámalo de la misma manera que el alias:
curltime wordpress.org
Cree un acceso directo de Windows (también conocido como archivo BAT)
Cree un nuevo archivo de texto llamado curltime.bat
en la misma carpeta que curl.exe
y curl-format.txt
y péguelo en la siguiente línea:
curl -w "@%~dp0curl-format.txt" -o NUL -s %*
Luego, desde la línea de comando simplemente puedes llamar:
curltime wordpress.org
(Asegúrese de que la carpeta aparezca en su PATH
variable de Windows para poder usar el comando desde cualquier carpeta).
Opción 1: a medida total time
:
curl -o /dev/null -s -w 'Total: %{time_total}s\n' https://www.google.com
Salida de muestra:
Total: 0.441094s
Opción 2 : obtener time to establish connection
y time to first byte (TTFB)
:total time
curl -o /dev/null -s -w 'Establish Connection: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n' https://www.google.com
Salida de muestra:
Establish Connection: 0.020033s
TTFB: 0.417907s
Total: 0.435486s
Ref: Obtener tiempo de respuesta con curl
Aquí está la respuesta:
curl -X POST -d @file server:port -w %{time_connect}:%{time_starttransfer}:%{time_total}
Todas las variables utilizadas -w
se pueden encontrar en man curl
.