Bash 脚本和 curl:如何在同一命令中获取状态代码和内容并存储在 var 中

Bash script and curl: how to get status code and content and store in var in same command

例如,在 PHP 或 Python 中,您可以执行 curl 并接收一个包含所有属性的对象。

在 bash 中,我必须调用 curl 应用程序。

我需要在同一个命令中获取状态码和内容(这很明显,因为状态码与获取内容的成功与否有关)。但是我该怎么做呢?

我正在尝试这个:

# get url in function
urlcurl=$(echo $@)
# create new file descriptor and redirect to STDOUT
exec 3>&1
# get curl status code and store in curlstatuscode
curlstatuscode=$(curl -L -k -w "%{http_code}" -o >(cat >&3) --silent \"${urlcurl}\")

我的问题与内容有关:当我在终端中执行此操作时,我在 STDOUT 中收到内容(这是必须执行的命令)。但我正在尝试使用正则重定向表达式存储此 STDOUT,但它们不起作用。

一个例子:

exec 3>&1
HTTP_STATUS=$(curl -k --silent -L -w "%{http_code}" -o >(cat >&3) 'http://example.com')
echo $HTTP_STATUS

如果你不明白我在做什么,大致模式(和无效)会是这样的: (我知道是无效的,我只是想澄清一下)

HTTP_CONTENT=$(echo `HTTP_STATUS=$(curl -k --silent -L -w "%{http_code}" -o >(cat >&3) 'http://example.com'`)

HTTP_CONTENT 将获取内容,HTTP_STATUS 将获取 curl 状态代码。

请不要对用户说另一种语言。我需要在 bash 中解决这个问题。用其他语言(主要是面向对象)做到这一点非常简单。我真的很想在 bash.

中做到这一点

谢谢!

由于 http 状态是 curl 输出的最后一行,您可以在 BASH 中这样做:

out=$(curl -k --silent -L -w "\n%{http_code}" 'minecraft.net/haspaid.jsp?user=apterixbr')
http_status="${out##*$'\n'}"
http_content="${out%$'\n'*}"