我有一个循环,逐个检查文件中的 URL,并希望获取状态标头和每个请求的执行时间作为结果。我有两个 curl 命令:
这个输出标题通信(不需要)和最后是 http 状态代码和时间 200 - 0,016
curl -w "%{http_code} - %{time_connect}" -I -s http://superuser.com >> test_result.txt
这一个得到了来自标头的 http 状态代码并将其打印到文件中HTTP/1.1 200 OK
curl -v -I -s http://superuser.com | findstr /c:"HTTP" >> test_result.txt
我怎样才能将这两个命令组合起来以获取一个请求的输出,如下所示
HTTP/1.1 200 OK - 0,016
因此提取带有 http 标头的行并附加执行时间,而不在文件中添加所有其他标头
答案1
您可以使用批处理文件
@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"
)
)
)
只需两个嵌套循环。第一个循环遍历 URL 文件,第二个循环执行并处理命令的输出curl
。
curl
命令的输出被过滤以findstr
仅检索具有状态代码和连接时间的行(输出字符串-w
已被修改以在输出中定位此数据)