如何使用从批处理脚本调用的cURL获取http POST请求的响应码? [英] How to fetch Response Code of http post request using curl invoked from a batch script?
问题描述
我正在为从我们的工具之一发送http post请求提供支持。该工具基本上通过http请求执行作业。
实现这一点的方法是该工具使用多个参数调用RunScript.bat。该脚本解析这些参数,并在验证后发出cURL POST请求。POST请求由我们的内部Java服务处理。
我希望我的批处理文件能够获取响应码(200/409等)基于此,脚本应将1或0作为退出值返回给工具。 然后,该工具根据返回值标记作业通过/失败。
工具:解析返回值
运行脚本.bat arg1 arg2 arg3
RunScript.bat
@echo off
SETLOCAL
ECHO %DATE% %TIME% Calling %0 with %*
SET "SCRIPT_DIR=%~dp0"
ECHO Script Dir %SCRIPT_DIR%
SET cmd=%1
SET val2=%2
SET val3=%3
%SCRIPT_DIR%curl -v -X POST http://localhost:9500/%cmd%/%val2%/%val3%
是否可以在批处理脚本中获取cURL请求的响应码,然后根据响应码返回1/0?
http
首先需要curl
输出推荐答案状态。为此,我使用pvandenberk's answertoGetting curl to output HTTP status code?。接下来,我们必须将该输出放入一个环境变量中,以便对其进行测试。为此,我们使用for
命令的for /f %%a in ( 'command-to-execute' ) do ...
形式(有关详细信息,请参阅for /?
)。
结合这些(以及其他一些小调整),下面这样的内容应该会有所帮助:
@echo off
SETLOCAL
ECHO %DATE% %TIME% Calling %0 with %*
SET "SCRIPT_DIR=%~dp0"
ECHO Script Dir %SCRIPT_DIR%
SET "cmd=%1"
SET "val2=%2"
SET "val3=%3"
SET "URL=http://localhost:9500/%cmd%/%val2%/%val3%"
SET HTTP=
for /f %%a in ( '"%SCRIPT_DIR%curl" -s -o nul -v -X POST -w "%%{http_code}" "%URL%"' ) do set HTTP=%%a
if "%HTTP%" == "200" (
exit /b 0
) else (
exit /b 1
)
备注:
我假设您原始URL中的
cmd
、val2
和val3
应该替换为早期环境变量的内容,因此在生成URL
时已将它们更改为%cmd%
等。在
for
语句中,要执行的整个命令都用单引号('.....'
)括起来。我已经用双引号括起了curl的调用(
/li>"%SCRIPT_DIR%curl"
):这应该允许它工作,即使脚本目录包含空格。我已经在cURL的命令行中添加了
-s
(无提示)和-o nul
(发送完整响应的位置)。这将有助于确保从POST
请求返回的任何输出不会干扰HTTP状态代码。如果需要查看此输出,请使用-o filename
和TYPE
文件,然后在HTTP
上进行测试。-w "%%{http_code}"
中的百分号需要加倍,因为它对外壳程序具有特殊意义。-v
(Verbose)的输出发送给stderr
,因此不应干扰捕获HTTP响应代码。
更新
要获得两个HTTP响应代码,并且仍然可以看到curl命令本身的输出,您可以尝试将上面的for /f ...
行替换为以下行:
for /f "delims=" %%a in ( '"%SCRIPT_DIR%curl" -v -X POST -w "%%{http_code}" "%URL%"' ) do set "HTTP=%%a" && echo %%a
"delims="
表示cURL的输出行不会被分割为单独的标记,因此%%a
将包含每行的全部内容。我已删除
-s
和-o nul
选项,因此仍将生成cURL的原始输出。set "HTTP=%%a"
命令添加了双引号,以防止将尾随空格添加到环境变量。因为响应代码(例如404)是cURL发出的最后一行,所以HTTP
的最终值仍然是我们想要的。echo %%a
将重播cURL生成的所有行。
这篇关于如何使用从批处理脚本调用的cURL获取http POST请求的响应码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!