curl 捕获 http 状态并计时请求

curl 捕获 http 状态并计时请求

我有一个循环,逐个检查文件中的 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已被修改以在输出中定位此数据)

相关内容