如何使用从批处理脚本调用的cURL获取http POST请求的响应码? [英] How to fetch Response Code of http post request using curl invoked from a batch script?

查看:28
本文介绍了如何使用从批处理脚本调用的cURL获取http POST请求的响应码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为从我们的工具之一发送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中的cmdval2val3应该替换为早期环境变量的内容,因此在生成URL时已将它们更改为%cmd%等。

  • for语句中,要执行的整个命令都用单引号('.....')括起来。

  • 我已经用双引号括起了curl的调用("%SCRIPT_DIR%curl"):这应该允许它工作,即使脚本目录包含空格。

    /li>
  • 我已经在cURL的命令行中添加了-s(无提示)和-o nul(发送完整响应的位置)。这将有助于确保从POST请求返回的任何输出不会干扰HTTP状态代码。如果需要查看此输出,请使用-o filenameTYPE文件,然后在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆