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 curl
comando.
A saída do curl
comando é filtrada para findstr
recuperar apenas as linhas com o código de status e o tempo de conexão (a string de saída -w
foi modificada para localizar esses dados na saída)