在curl-bash脚本中使用JSON输出
我想将一个文件自动上载到rackspace文件,该文件需要每天更新的身份验证令牌,因此我想创建一个脚本,获取身份验证令牌,然后在脚本中使用该令牌上载文件 此命令用于获取能够完美输出密钥的身份验证令牌:在curl-bash脚本中使用JSON输出,bash,curl,rackspace-cloud,Bash,Curl,Rackspace Cloud,我想将一个文件自动上载到rackspace文件,该文件需要每天更新的身份验证令牌,因此我想创建一个脚本,获取身份验证令牌,然后在脚本中使用该令牌上载文件 此命令用于获取能够完美输出密钥的身份验证令牌: curl -s -X POST https://auth.api.rackspacecloud.com/v2.0/tokens\ -d '{ "auth":{ "RAX-KSKEY:apiKeyCredentials":{ "username":"USER", "apiKey":"KEY
curl -s -X POST https://auth.api.rackspacecloud.com/v2.0/tokens\
-d '{ "auth":{ "RAX-KSKEY:apiKeyCredentials":{ "username":"USER", "apiKey":"KEY" } } }'\
-H "Content-type: application/json" | python -mjson.tool |\
python -c 'import sys, json;\
print json.load(sys.stdin)[sys.argv[1]][sys.argv[2]][sys.argv[3]]'\
access token id
这是上载文件的命令:
curl -X PUT -T file.xml -D - \
-H "Content-Type: text/xml" \
-H "X-Auth-Token: TOKENGOESHERE" \
URL
我需要将第一个命令中的令牌放入第二个命令中的tokengoesher位置
到目前为止,我尝试的是:
token = curl -s -X POST https://auth.api.rackspacecloud.com/v2.0/tokens -d '{ "auth":{ "RAX-KSKEY:apiKeyCredentials":{ "username":"USER", "apiKey":"KEY" } } }' -H "Content-type: application/json" | python -mjson.tool | python -c 'import sys, json; print json.load(sys.stdin)[sys.argv[1]][sys.argv[2]][sys.argv[3]]' access token id
curl -X PUT -T file.xml -D - \
-H "Content-Type: text/xml" \
-H "X-Auth-Token: $token" \
URL
但它不起作用,我猜它与引号有关,但我对bash了解不够,不知道问题出在哪里
谢谢 这是您应该使用的模式:
token=`cat /etc/passwd`
echo "file contents: $token"
请注意,正如triplee所指出的,在=符号的两侧不能有空格。这是您应该使用的模式:
token=`cat /etc/passwd`
echo "file contents: $token"
请注意,正如triplee所指出的那样,=符号的两边都不能有空格。这应该可以:
token=$(curl -s -X POST https://auth.api.rackspacecloud.com/v2.0/tokens \
-d '{ "auth":{ "RAX-KSKEY:apiKeyCredentials":{ "username":"USER", "apiKey":"KEY" } } }' \
-H "Content-type: application/json" \
| python -mjson.tool \
| python -c 'import sys, json; print json.load(sys.stdin)["access"]["token"]["id"]')
curl -X PUT -T file.xml -D - \
-H "Content-Type: text/xml" \
-H "X-Auth-Token: $token" \
URL
这应该起作用:
token=$(curl -s -X POST https://auth.api.rackspacecloud.com/v2.0/tokens \
-d '{ "auth":{ "RAX-KSKEY:apiKeyCredentials":{ "username":"USER", "apiKey":"KEY" } } }' \
-H "Content-type: application/json" \
| python -mjson.tool \
| python -c 'import sys, json; print json.load(sys.stdin)["access"]["token"]["id"]')
curl -X PUT -T file.xml -D - \
-H "Content-Type: text/xml" \
-H "X-Auth-Token: $token" \
URL
我强烈建议跳过curl并使用在上找到的特定于语言的SDK之一
它们都可以轻松地处理身份验证和长寿命进程的重新身份验证。他们都有如何上传文件的例子 我强烈建议跳过curl并使用在上找到的特定于语言的SDK之一
它们都可以轻松地处理身份验证和长寿命进程的重新身份验证。他们都有如何上传文件的例子 我知道这有点离题,但我想分享我的“工作流程”,这可能会帮助很多人 如果您下载这两个很酷的玩具(替换curl和python的json):
json=$(echo '{ "auth":{ "RAX-KSKEY:apiKeyCredentials":{ "username":"USER", "apiKey":"KEY" } } }' | http POST https://auth.api.rackspacecloud.com/v2.0/tokens)
使用http获取令牌:
token=$(echo $json | jq '.access | .token | .id' | sed s/\"//g)
便于以后使用令牌:
auth="X-Auth-Token:$token"
获取Sydney cloud文件的端点(更改您喜爱的数据中心的SYD)(如果您是从DC内部运行,请将publicURL更改为internalURL):
--艰苦的工作已经完成,现在变得容易了--
获取容器列表:
http "$url" $auth
创建一个容器:
http PUT "$url/my_container" $auth
http PUT "$cdn_url/my_container" $auth "X-Cdn-Enabled: True"
pub_url=$(http -h HEAD "$cdn_url/my_container" $auth | awk '/X-Cdn-Uri/{print $2;}')
上载文件:
cat python1.JPG | http PUT "$url/my_container/python1.jpg" $auth
列出文件:
http "$url/my_container"
获取CDN API URL(不是用于下载的URL,以后再说):
CDN启用容器:
http PUT "$url/my_container" $auth
http PUT "$cdn_url/my_container" $auth "X-Cdn-Enabled: True"
pub_url=$(http -h HEAD "$cdn_url/my_container" $auth | awk '/X-Cdn-Uri/{print $2;}')
获取my_容器的公共CDN url:
http PUT "$url/my_container" $auth
http PUT "$cdn_url/my_container" $auth "X-Cdn-Enabled: True"
pub_url=$(http -h HEAD "$cdn_url/my_container" $auth | awk '/X-Cdn-Uri/{print $2;}')
查看您的文件:
firefox "$pub_url/python1.jpg"
所有API文档都在这里:
享受:)我知道这有点离题,但我想分享我的“工作流程”,它可能会帮助很多人 如果您下载这两个很酷的玩具(替换curl和python的json):
json=$(echo '{ "auth":{ "RAX-KSKEY:apiKeyCredentials":{ "username":"USER", "apiKey":"KEY" } } }' | http POST https://auth.api.rackspacecloud.com/v2.0/tokens)
使用http获取令牌:
token=$(echo $json | jq '.access | .token | .id' | sed s/\"//g)
便于以后使用令牌:
auth="X-Auth-Token:$token"
获取Sydney cloud文件的端点(更改您喜爱的数据中心的SYD)(如果您是从DC内部运行,请将publicURL更改为internalURL):
--艰苦的工作已经完成,现在变得容易了--
获取容器列表:
http "$url" $auth
创建一个容器:
http PUT "$url/my_container" $auth
http PUT "$cdn_url/my_container" $auth "X-Cdn-Enabled: True"
pub_url=$(http -h HEAD "$cdn_url/my_container" $auth | awk '/X-Cdn-Uri/{print $2;}')
上载文件:
cat python1.JPG | http PUT "$url/my_container/python1.jpg" $auth
列出文件:
http "$url/my_container"
获取CDN API URL(不是用于下载的URL,以后再说):
CDN启用容器:
http PUT "$url/my_container" $auth
http PUT "$cdn_url/my_container" $auth "X-Cdn-Enabled: True"
pub_url=$(http -h HEAD "$cdn_url/my_container" $auth | awk '/X-Cdn-Uri/{print $2;}')
获取my_容器的公共CDN url:
http PUT "$url/my_container" $auth
http PUT "$cdn_url/my_container" $auth "X-Cdn-Enabled: True"
pub_url=$(http -h HEAD "$cdn_url/my_container" $auth | awk '/X-Cdn-Uri/{print $2;}')
查看您的文件:
firefox "$pub_url/python1.jpg"
所有API文档都在这里:
享受:)捕获命令输出的语法是
token=$(curl…
。当第一个空格后的选项被尝试作为命令时,您只需分配静态字符串值token=curl
,并获得一条错误消息(您应该将其包含在诊断中)。谢谢,我这样做了,并尝试使用:echo“$token”来回显它,错误是:找不到token:command。这不是在命令中使用变量的正确方法吗?您需要避免等号周围出现空格。捕获命令输出的语法是token=$(curl…
)。当第一个空格后的选项被尝试作为命令时,您只需分配静态字符串值token=curl
,并获得一条错误消息(您应该将其包含在诊断中)。谢谢,我这样做了,并尝试使用:echo“$token”来回显它,错误是:找不到token:command。这不是在命令中使用变量的正确方法吗?您需要避免等号周围的空格。谢谢,但是我想要的是一个非常简单的脚本,可以在非常低功耗的linux机器上每天运行,但是我想要的是一个非常简单的脚本,可以在非常低功耗的linux机器上每天运行。这太棒了!当然,这是为了将来使用而保存的,但是现在基本的curl和mstool.json都可以了,这太棒了!当然可以保存它以备将来使用,但现在基本的curl和mstool.json就可以了