【问题标题】:How to catch timeout/errors in a CURL shell script?如何在 CURL shell 脚本中捕获超时/错误?
【发布时间】:2013-08-18 00:05:08
【问题描述】:

我想向一个 URL 发出一个 cURL GET 请求,并根据返回的 HTTP 代码决定是否对返回的 HTTP 数据做一些事情。

例如,如果通过 cURL 请求某个 url 的 HTTP 代码是有效的(未超时或错误),则将请求返回的数据保存在我系统的某个位置。

我如何才能真正“捕获”返回的 HTTP 代码(或超时)并据此做出决定?

【问题讨论】:

标签: bash http shell curl


【解决方案1】:

script.sh http://www.google.com/ 执行以下操作。
-D - 将标头转储到文件
-o - 将响应写入文件
-s - 保持沉默
-w - 显示值指定变量

#!/bin/bash

RESPONSE=response.txt
HEADERS=headers.txt

status=$(curl -s -w %{http_code} $1 -o $RESPONSE)

# or
#curl -s -D $HEADERS $1 -o $RESPONSE
#status=$(cat $HEADERS | head -n 1 | awk '{print $2}')

echo $status

使用$status$RESPONSE 进行进一步处理。

【讨论】:

  • +1 用于包含 CLI 选项的说明。它们在 man 文件中,但很高兴删除了额外的抽象级别,只需要海报部分的少量工作。我希望更多的人会这样做。
  • % 符号窗口是特定的吗?
  • @ElgsQianChen % 符号不是特定于 Windows 的。可用于curl-w 选项的预定义变量使用%{variable_name} 格式传递。为了在 windows 中运行,必须手动转义 % 符号。来自 curl 手册页 - NOTE: The %-symbol is a special symbol in the win32-environment, where all occurrences of % must be doubled when using this option.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 2019-03-21
  • 2011-04-28
  • 2019-01-21
相关资源
最近更新 更多