bash - 从 Curl 请求中获取状态码和响应正文
问题描述
我想检查 http 响应代码,curl
但仍然能够检索返回的数据并将其存储在变量中。
我发现这个答案非常有帮助:https
://superuser.com/a/862395/148175 用户描述了他如何创建一个3
重定向到STDOUT
.
然后他curl
在一个子shell中运行,在那里他将 的输出捕获-w "%{http_code}"
到一个变量HTTP_STATUS
中,并将输出捕获到 STDOUT 中-o >(cat >&3)
。
我的问题是我想在函数中运行 curl 后将 STDOUT 的输出捕获到变量中。
这是我的脚本:
#!/bin/bash
exec 3>&1
function curlBinData {
HTTP_STATUS=$(curl -s -w "%{http_code}" -o >(cat >&3) https://www.google.com --data-binary $1)
if [ $HTTP_STATUS -ne 200 ]; then
echo Error: HTTP repsonse is $HTTP_STATUS
exit
fi
}
responsedata=$(curlBinData '{"head":5}')
echo $responsedata
它能做什么:
curl 的输出被定向到STDOUT
控制台窗口并在控制台窗口中打印。
想要什么
由于函数调用curl
是在子 shell 中运行的,因此它应该将输出定向到变量responsedata
.
解决方案
据我了解,Error: HTTP repsonse is $status
如果$status
不等于,您希望此函数输出200
,否则输出响应正文,所以这里是代码。我没有看到需要额外的文件描述符,所以我删除了它。
#!/bin/bash
function curlBinData {
local res=$(curl -s -w "%{http_code}" https://www.google.com --data-binary $1)
local body=${res::-3}
local status=$(printf "%s" "$res" | tail -c 3)
if [ "$status" -ne "200" ]; then
echo "Error: HTTP repsonse is $status"
exit
fi
echo $body
}
responsedata=$(curlBinData '{"head":5}')
echo $responsedata
编辑:简化了 curl 响应中状态码的评估,只得到最后三个字符,也就是状态码。
推荐阅读
- php - PHP:将字符串转换为数组
- c# - 检索 XSD 中可选元素的默认值
- excel - EXCEL VBA does not run SOLVER inside a macro invoked from a chart button
- python - 如何使用 Keras 中保存的模型对图像进行预测和分类?
- ms-access - MS Access 表单已锁定以进行编辑 - 添加了解锁按钮但无法添加新记录
- php - 如何检查Mysql时间字段是否为NULL
- php - 编辑随附的 wordpress 简码的内容
- angular - 如何避免两个选项卡Angular 4之间的会话共享
- python - 列出今天使用 Boto 3 创建的 RDS 快照
- sql - 使用存储过程将excel工作表数据加载到sql表中