【发布时间】:2013-08-18 00:05:08
【问题描述】:
我想向一个 URL 发出一个 cURL GET 请求,并根据返回的 HTTP 代码决定是否对返回的 HTTP 数据做一些事情。
例如,如果通过 cURL 请求某个 url 的 HTTP 代码是有效的(未超时或错误),则将请求返回的数据保存在我系统的某个位置。
我如何才能真正“捕获”返回的 HTTP 代码(或超时)并据此做出决定?
【问题讨论】:
-
This answer 密切相关...
我想向一个 URL 发出一个 cURL GET 请求,并根据返回的 HTTP 代码决定是否对返回的 HTTP 数据做一些事情。
例如,如果通过 cURL 请求某个 url 的 HTTP 代码是有效的(未超时或错误),则将请求返回的数据保存在我系统的某个位置。
我如何才能真正“捕获”返回的 HTTP 代码(或超时)并据此做出决定?
【问题讨论】:
以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 进行进一步处理。
【讨论】:
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.