如何使用批处理脚本调用的curl 获取http post 请求的响应代码?

2024-05-13

我正在努力为从我们的工具之一发送 http post 请求提供支持。该工具基本上通过 http 请求执行作业。

实现此目的的方法是该工具使用多个参数调用 RunScript.bat。该脚本解析这些参数并在验证后发出curl post 请求。 Post 请求由我们内部的 Java 服务处理。

我想要的是我的批处理文件应该能够获取发布请求的响应代码(200/409 等),并且基于此,脚本应该返回 1 或 0 作为退出值返回到工具。 然后,该工具根据返回值标记作业通过/失败。

工具:解析返回值

RunScript.bat arg1 arg2 arg3

运行脚本.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请求的Response Code,然后根据Response Code返回1/0?


我们首先需要得到curl输出 HTTP 状态。为此我使用了普凡登伯克的回答 https://superuser.com/a/442395/347295 to 让curl输出HTTP状态代码? https://superuser.com/q/272265/347295。接下来,我们必须将该输出放入环境变量中,以便我们可以测试它。为此,我们使用for /f %%a in ( 'command-to-execute' ) do ...的形式for命令(参见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
)

Notes:

  • 我已经假设cmd, val2 and val3原始 URL 中的内容应该替换为早期环境变量的内容,因此已将它们更改为%cmd%建造时等URL.

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

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

  • 我已经添加-s(沉默)和-o nul(将完整响应发送到哪里)到curl 的命令行。这将有助于确保从POST请求不会干扰 HTTP 状态代码。如果您需要查看此输出,请使用-o filename and TYPE进行测试之前的文件HTTP.

  • 百分号登录-w "%%{http_code}"需要加倍,因为它对 shell 有特殊意义。

  • 的输出-v(详细)发送至stderr因此不应干扰捕获 HTTP 响应代码。


Update

要获取 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
  • The "delims="意味着curl 的输出行不会被分割成单独的标记,因此%%a将保留每一行的全部。

  • 我已经删除了-s and -o nul选项,因此仍会生成curl 的原始输出。

  • The set "HTTP=%%a"命令添加了双引号,以防止将尾随空格添加到环境变量中。因为响应代码(例如404)是curl发出的最后一行,所以最终值HTTP仍然会是我们想要的。

  • The echo %%a将重播由curl生成的所有行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用批处理脚本调用的curl 获取http post 请求的响应代码? 的相关文章

随机推荐

  • 如何使用对象标记上传到 AWS S3

    有没有办法使用标签将文件上传到AWS S3 不将标签添加到S3中的现有文件 对象 我需要让该文件与我的 Tags 一起出现在 S3 中 即在单个 API 调用中 我需要这个 因为我使用 Lambda 函数 使用这些 S3 对象标签 由 S3
  • ELEMENT.style.color 在 IE 中不起作用

    在一个小型 Web 应用程序中 我使用 JavaScript 在文本框中设置一些文本及其颜色 在下面的片段中 el 是我的对象 这段代码在 Firefox Opera 和 Safari 下产生了正确的效果 但在 IE 下却没有这样的运气 我
  • C++ 计算经过的时间

    我需要计算我的函数所花费的时间 现在我正在使用 std clock 据我了解 这是测量 CPU 时间 这可能与实时不同 std clock t start double duration start std clock someFuncti
  • webrtc - 获取网络摄像头的宽高比

    我正在尝试学习如何开发 webRTC 应用程序 我想知道是否可以获得相机的宽高比 我不知道它是否有帮助 但我正在使用 webrtc io 但是 if更好 我可以停止使用它 From MDN https developer mozilla o
  • 使用 X11 窗口的 R 脚本仅打开一秒钟

    我正在通过 Linux Mint 16 命令行运行 R 脚本 它包含我想在窗口中显示的箱线图 所以我使用 x11 函数来创建该窗口 这是我的代码 testdata lt data frame sample 1 1000 size 100 r
  • 尝试将 webpack-dev-server 上的端口更改为 80 会出现错误

    我的 json 包中有这个 webpack dev server config config webpack config js port 80 我还尝试将端口添加到配置中 如下所示 devServer historyApiFallback
  • 简单的 Django 图像上传 - 图像文件不保存

    是的 我正在学习如何制作一个简单的图像上传表单以将图像上传到 MEDIA ROOT 表单呈现良好 我没有收到任何错误 但该文件未显示在 MEDIA ROOT 目录中 如果遵循文档示例但无法使其工作 我知道这是因为我没有正确理解 django
  • 如何在 Xamarin 中使用 Log4Net

    我有一个使用 Xamarin MonoTouch 的应用程序 我想在其中使用日志记录框架 搜索时我遇到了 Log4Net http logging apache org log4net http logging apache org log
  • 在 Eclipse 插件中:如何以编程方式突出显示 java 编辑器中的代码行?

    我正在尝试开发一个 eclipse 插件 它对 java 代码进行一些文档检查 并在编辑器中突出显示一些代码行 为了实现我的目标 我不想在 eclipse 中创建新的编辑器 我只是想扩展默认的 java 编辑器以在不满足某些预定要求的方法下
  • 模拟 BlazeClientBuilder[IO] 以返回模拟客户端[IO]

    我正在使用BlazeClientBuilder IO resource方法得到Client IO 现在 我想模拟客户端进行单元测试 但不知道该怎么做 有没有一个好的方法来嘲笑这个 我会怎么做 class ExternalCall val r
  • Java:等于和==

    让我们看看我们有 2 个对用户定义类实例的引用 即 Java 中的 a 和 b 会不会有一种情况 a b 但 a equals b 返回 false 当然 实施 equals 完全取决于班级 所以我可以写 class Foo public
  • 为什么 Roslyn 中有这么多对象池的实现?

    The 对象池 http source roslyn codeplex com Microsoft CodeAnalysis ObjectPool 25601 cs 20b9a041fb2d5b00是 Roslyn C 编译器中使用的一种类
  • 匹配 JavaScript RegEx 中的不可见字符

    我有一些包含不可见字符的字符串 但它们位于可预测的位置 通常 围绕我想要提取的文本片段 然后在第二次出现之后我想保留文本的其余部分 我似乎不知道如何关闭隐形字符 and将它们从我的结果中排除 为了匹配隐形 我一直在使用这个正则表达式 xA0
  • 在 Spring Webflux 中执行阻塞 JDBC 调用

    我使用 Spring Webflux 和 Spring data jpa 使用 PostgreSql 作为后端数据库 我不想在进行数据库调用时阻塞主线程 例如find and save 为了实现同样的目标 我有一个主调度程序Controll
  • 向图像添加坐标,以用作 R 中的 Leaflet、Shiny 和 Shinydashboard 包中的地图

    我计划使用 Leaflet Shiny 和 Shinydashboard 沿着以下很棒的路线创建一个带有医院 OHS 事件标记的交互式地图交互式地图和直方图模板 http shiny rstudio com gallery superzip
  • 寻找免费的 GUI 工具来使用 PostgreSQL [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 目前 我正在使用独立的 GUI 工具DbSchema http www dbschema com 设计
  • MongoDB 和 Mongoose 访问一个数据库,同时针对另一个数据库进行身份验证(NodeJS、Mongoose)

    我有几个数据库 不想为每个数据库创建单独的用户帐户 MongoDB 支持使用另一个数据库中定义的帐户来验证对数据库的访问的概念 但语法示例很难获得 当我终于弄清楚时 我正准备提出一个问题 如果它对其他人有帮助 就放在这里 这是 mongod
  • 什么是“太聪明”的 Ruby 代码示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在与一些程序员朋友进行讨论 他们说他们看到 Ruby 程序员 尤其是 编写了很多 太聪明 的代码 所以我想知道那会是什么样子 我指
  • QTextEdit.find() 在 Python 中不起作用

    演示问题的简单代码 usr bin env python import sys from PyQt4 QtCore import QObject SIGNAL from PyQt4 QtGui import QApplication QTe
  • 如何使用批处理脚本调用的curl 获取http post 请求的响应代码?

    我正在努力为从我们的工具之一发送 http post 请求提供支持 该工具基本上通过 http 请求执行作业 实现此目的的方法是该工具使用多个参数调用 RunScript bat 该脚本解析这些参数并在验证后发出curl post 请求 P