¿Cómo mido los tiempos de solicitud y respuesta a la vez usando cURL?

Resuelto sdasdadas asked hace 11 años • 15 respuestas

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 timecomando 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?

sdasdadas avatar Aug 14 '13 00:08 sdasdadas
Aceptado

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 .

  1. Cree un nuevo archivo curl-format.txty 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
    
  2. 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/nullredirige 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 .txtarchivo separado para contener el formato.

Cree un nuevo archivo, curltimeen 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.baten la misma carpeta que curl.exey curl-format.txty 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 PATHvariable de Windows para poder usar el comando desde cualquier carpeta).

Simon E. avatar Mar 25 '2014 03:03 Simon E.

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 connectiony 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

Tho avatar Feb 24 '2015 10:02 Tho

Aquí está la respuesta:

curl -X POST -d @file server:port -w %{time_connect}:%{time_starttransfer}:%{time_total}

Todas las variables utilizadas -wse pueden encontrar en man curl.

sdasdadas avatar Aug 13 '2013 17:08 sdasdadas