Поэтому я хочу автоматизировать процесс загрузки файла в Rackspace. Вот что мне нужно сделать:
Сначала я набираю:
curl -D - \
-H "X-Auth-Key: 123456789abcdefghijk" \
-H "X-Auth-User: MyUsername" \
https://auth.api.rackspacecloud.com/v1.0
Это дает мне ответ, например:
HTTP/1.1 204 No Content
Server: Apache/2.2.3 (Red Hat)
vary: X-Auth-Token,X-Auth-Key,X-Storage-User,X-Storage-Pass
X-Storage-Url: https://storage101.ord1.clouddrive.com/v1/BlahBlah
Cache-Control: s-maxage=46818
Content-Type: text/xml
Date: Tue, 07 Feb 2012 05:07:09 GMT
X-Auth-Token: SOME_AUTH_TOKEN_I_NEED
X-Storage-Token: blahblah
X-Server-Management-Url: https://servers.api.rackspacecloud.com/v1.0/123456
Connection: Keep-Alive
X-CDN-Management-Url: https://cdn2.clouddrive.com/v1/BlahBlah
Далее мне нужно загрузить файл:
curl -X PUT -T foo.txt -D - \
-H "ETag: 7849eb8d56581fa7c4896bb0db64892c" \
-H "Content-Type: text/plain" \
-H "X-Auth-Token: SOME_AUTH_TOKEN_I_NEED" \
-H "X-Object-Meta-Screenie: Test" \
https://storage101.ord1.clouddrive.com/v1/BlahBlah/MyBackup/foo.txt
Итак, в основном, мне нужно проанализировать токен аутентификации (X-Auth-Token), а также URL-адрес хранилища (X-Storage-Url) и динамически создать следующую команду.
Есть ли способ сделать это с помощью сценария оболочки, возможно, используя регулярные выражения или что-то в этом роде? Любые указатели были бы очень признательны!
Конечно, есть более элегантное решение, чем это, но, с моей точки зрения, быстрый и грязный способ сделать это с помощью bash будет примерно таким:
#!/bin/bash
xauthtoken=`curl -D - \
-H "X-Auth-Key: 123456789abcdefghijk" \
-H "X-Auth-User: MyUsername" \
https://auth.api.rackspacecloud.com/v1.0 | grep X\-Auth\-Token | awk '{print $2}'`
xstorageurl=`curl -D - \
-H "X-Auth-Key: 123456789abcdefghijk" \
-H "X-Auth-User: MyUsername" \
https://auth.api.rackspacecloud.com/v1.0 | grep X\-Storage\-Url | awk '{print $2}'`
curl -X PUT -T foo.txt -D - \
-H "ETag: 7849eb8d56581fa7c4896bb0db64892c" \
-H "Content-Type: text/plain" \
-H "X-Auth-Token: ${xauthtoken}" \
-H "X-Object-Meta-Screenie: Test" \
$xstorageurl