【问题标题】:cURL Post request: get response and status codecURL Post 请求:获取响应和状态码
【发布时间】:2015-05-28 09:51:42
【问题描述】:

我使用以下方式发出cURL 请求:

PATCH=$(curl -i -F file=@$FILE -F path="${STORAGE_PATH}" -F name="${NAME}" -F description="${DESC}" "${SERVER}/api/patches")

如果响应通过并且数据是属性格式的,那么PATCH 将是响应的 JSON。

我也想同时获取HTTP响应码(比如200、422),这样可以验证流程是否通过。

我该怎么做?我只想得到一个数字(比如 200)。

【问题讨论】:

标签: curl


【解决方案1】:

你可以使用:

PATCH=$(curl -L -w "%{http_code} %{url_effective}\\n" -X POST -d @filename.txt ${server}/api/patches --header "Content-Type:application/json")

它会给你响应代码和正文。

【讨论】:

  • 您能否详细说明我应该如何从 PATCH 变量中提取状态码?
  • STATUS=$(echo $PATCH | tail -n 1) 将在$STATUS 中存储状态(最后一行),BODY=$(echo $PATCH | sed '$d') 将在$BODY 中存储正文(除最后一行之外的所有内容)。
【解决方案2】:

我用这篇文章解决了我的问题,并认为我会分享我的结果。我的目标是创建一个脚本来确保我的 accesstoken 端点正常工作。所以我不得不进行 POST 调用并提取响应代码,这是我的最终结果:

status=$(curl -w "%{http_code}\\n" -H "Accept:application/json" -H "Content-Type:application/x-www-form-urlencoded" --data "client_id=blah&client_secret=blah&grant_type=password&user_name=user&password=pass" https://api.company.com/v1/accessToken -s -o /dev/null)

说明

  • status=$({curlRequest}) 会将输出存储到 bash 变量中
  • -w 将从响应中提取状态码
  • -H 配置我的 HTTP 标头请求
  • --data 设置我想要 POST 的有效负载数据(此标志也会自动将请求设置为 POST
  • -s 将使请求的进度表静音
  • -o 这将提取响应正文并将其放入文件中。通过将值设置为/dev/null,输出被丢弃

如果您只需要响应代码,则此处的键值为 -w-o。移除 -o 标志以保留响应正文。

【讨论】:

  • 谢谢,它有效,但是当我看到-a -b -c -b -z -y -c时,我想你们为什么不使用像--silent --header --write-out这样的完整形式
  • 当我看到这一点时,我也会感到困惑,尤其是在我刚开始的时候。当您开始记住命令时,您希望键入尽可能少的字符。纯粹是为了开发速度。
猜你喜欢
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多