У меня есть цикл, в котором я проверяю 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
была изменена для поиска этих данных в выводе)