curl capturando o status http e cronometrando a solicitação

curl capturando o status http e cronometrando a solicitação

Eu tenho um loop no qual verifico os URLs do arquivo um por um e desejo obter como resultado o cabeçalho de status e o tempo de execução de cada solicitação. Eu tenho dois comandos curl:

Este gera a comunicação do cabeçalho (não desejada) eno final o código de status http e a hora 200 - 0,016

curl -w "%{http_code} - %{time_connect}" -I -s http://superuser.com >> test_result.txt

Este fica na linha com ocódigo de status http do cabeçalhoe imprime no arquivoHTTP/1.1 200 OK

curl -v -I -s http://superuser.com | findstr /c:"HTTP" >> test_result.txt

Como posso combinar esses dois comandos para obter a saída de uma solicitação como esta

HTTP/1.1 200 OK - 0,016

extraindo a linha com o cabeçalho http e acrescentando o tempo de execução sem todos os outros cabeçalhos no arquivo

Responder1

Você pode usar um arquivo em lote

@echo off
    setlocal enableextensions disabledelayedexpansion

    rem Just to test - Generate a file with URLs
    > ".\urls.txt" (
        echo http://superuser.com
        echo http://www.google.com
    )

    > ".\testResults.txt" (
        for /f "useback delims=" %%u in (".\urls.txt") do (
            set "statusCode="
            echo([%%u]
            for /f "tokens=1,2 delims=#" %%a in ('
                curl -w "##%%{time_connect}##." -I -s --url "%%~u"
                ^| findstr /l /b /c:"HTTP/" /c:"##"
            ') do if "%%b"=="." (
                setlocal enabledelayedexpansion
                echo(    !statusCode! - %%a
                endlocal
            ) else (
                set "statusCode=%%a"
            )
        )
    )

Apenas dois loops aninhados. O primeiro itera no arquivo URLs e o segundo executa e processa a saída do curlcomando.

A saída do curlcomando é filtrada para findstrrecuperar apenas as linhas com o código de status e o tempo de conexão (a string de saída -wfoi modificada para localizar esses dados na saída)

informação relacionada