curl は http ステータスをキャプチャし、リクエストのタイミングを計ります

curl は http ステータスをキャプチャし、リクエストのタイミングを計ります

ファイルから URL を 1 つずつチェックするループがあり、結果として各リクエストのステータス ヘッダーと実行時間を取得したいと考えています。2 つの 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

これら2つのコマンドを組み合わせて、1つのリクエストから次のように出力を取得するにはどうすればよいでしょうか。

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"
            )
        )
    )

ネストされたループが 2 つあります。最初のループは URL ファイルを反復処理し、2 番目のループはコマンドの出力を実行して処理しますcurl

curlコマンドの出力は、findstrステータス コードと接続時間を含む行のみを取得するためにフィルタリングされます (出力文字列は、-wこのデータを出力内に配置するために変更されています)

関連情報