cURL操作Openstack对象存储的ReST API详解
由于最近工作需要使用Openstack,使用cURL操作Openstack对象存储的ReSTAPI,这是本人找了好多资料完成的,这里记录下。
使用Openstack,使用cURL操作Openstack对象存储的ReSTAPI
cURL是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。本文主要是介绍使用该工具和HTTP协议与swift服务如何交互。cURL允许你从命令行或shell脚本传送和接收HTTP的请求和响应。这使得直接与ReST的API工作而无需其他客服端APIs成为可能。本文,我们需要使用到以下的cURL命令行选项:
-XMETHOD描述HTTP的请求方法(HEAD,GET等) -DDump将HTTP响应头部到stdout. -HHEADER描述一个在请求中的HTTP\HTTPS头部. -v使用操作的过程更加详细
1.认证
InordertousetheReSTAPI,youwillfirstneedtoobtainaauthorizationtoken,whichwillneedtobepassedinforeachrequestusingtheX-Auth-Tokenheader.ThefollowingexampledemonstrateshowtousecURLtoobtaintheauthorizationtokenandtheURLofthestoragesystem.
为了使用ReST的API,我们首先需要获得一个认证令牌,用于传给每个使用X-Auth-Token头部的请求。以下的例子展示了如何使用cURL来获得认证令牌和存储系统的URL。
Exp1:获得X-Storage-Url和X-Auth-Token
curl-D--H'X-Storage-User:test:tester'-H'X-Storage-Pass:testing'http://127.0.0.1:8080/auth/v1.0
运行结果如下:
sting'http://127.0.0.1:8080/auth/v1.0 HTTP/1.1200OK X-Storage-Url:http://127.0.0.1:8080/v1/AUTH_test X-Storage-Token:AUTH_tkf828cc87bb9348168a52619b1f7e3928 X-Auth-Token:AUTH_tkf828cc87bb9348168a52619b1f7e3928 Content-Length:0 Date:Fri,07Oct201107:45:58GMT
也可以使用-v选项来获得更详细的信息:
curl-v-H'X-Storage-User:test:tester'-H'X-Storage-Pass:testing'http://127.0.0.1:8080/auth/v1.0
运行结果如下:
*Abouttoconnect()to127.0.0.1port8080(#0) *Trying127.0.0.1...connected *Connectedto127.0.0.1(127.0.0.1)port8080(#0) >GET/auth/v1.0HTTP/1.1 >User-Agent:curl/7.21.3(i686-pc-linux-gnu)libcurl/7.21.3OpenSSL/0.9.8ozlib/1.2.3.4libidn/1.18 >Host:127.0.0.1:8080 >Accept:*/* >X-Storage-User:test:tester >X-Storage-Pass:testing > <HTTP/1.1200OK <X-Storage-Url:http://127.0.0.1:8080/v1/AUTH_test <X-Storage-Token:AUTH_tkf828cc87bb9348168a52619b1f7e3928 <X-Auth-Token:AUTH_tkf828cc87bb9348168a52619b1f7e3928 <Content-Length:0 <Date:Fri,07Oct201107:48:30GMT < *Connection#0tohost127.0.0.1leftintact *Closingconnection#0
存储URL和认证令牌作为响应头部返回。在认证之后,你可以使用cURL来执行存储服务上的HEAD,GET,DELETE,POST和PUT请求。
2.确定存储的使用情况
一个HEAD请求可以发送到存储服务来确定你已经在系统中存储了多少数据以及你使用的容器数量。使用-X开关来描述正确的HTTP方法和-D将HTTP响应头部输出到终端(stdout)。
Exp2:查询帐号的存储使用情况
curl-XHEAD-D-\ -H"X-Auth-Token:AUTH_tkf828cc87bb9348168a52619b1f7e3928"\ http://127.0.0.1:8080/v1/AUTH_test
输出如下:
HTTP/1.1204NoContent X-Account-Object-Count:3 X-Account-Bytes-Used:92983 X-Account-Container-Count:4 Accept-Ranges:bytes Content-Length:0 Date:Fri,07Oct201108:04:38GMT
HTTP请求必须包含了一个头部来描述认证令牌。在响应中的HTTP头部显示在该存储帐号中的容器数量和整个帐号所存储的总字节数。
3.创建一个存储容器
在上传任何数据到OpenStack的对象存储之前,你必须创建一个存储容器。你可以使用PUT请求来创建一个容器;cURL也可以用于该目的。
Exp3:创建一个photos的容器
curl-XPUT-D--H"X-Auth-Token:AUTH_tkf828cc87bb9348168a52619b1f7e3928"http://127.0.0.1:8080/v1/AUTH_test/photos
运行结果如下:
HTTP/1.1201Created Content-Length:18 Content-Type:text/html;charset=UTF-8 Date:Fri,07Oct201108:18:44GMT
返回201(Created)的HTTP状态代码表示容器已被成功地创建。
4.上传一个存储对象
在创建完一个容器之后,你可以上传一个本地文件。对于这个例子,我们上传一张林志玲MM的照片。-T开关描述到上传的本地文件的完整路径。
Exp4:上传对象
curl-XPUT-T/home/swift/下载/lzl.jpg-D-\ -H"Content-Type:image/jpeg"\ -H"X-Auth-Token:AUTH_tkf828cc87bb9348168a52619b1f7e3928"\ -H"X-Object-Meta-lzl:一张关于林志玲的美图"\ http://127.0.0.1:8080/v1/AUTH_test/photos/lzl.jpg
结果如下:
HTTP/1.1201Created Content-Length:118 Content-Type:text/html;charset=UTF-8 Etag:870563216b9f54942fc09d574aa3e2bd Last-Modified:Fri,07Oct201108:39:49GMT Date:Fri,07Oct201108:39:51GMT
5.其他cURL命令
你可以使用cURL工具发出任何已定义的用于OpenStack对象存储的ReST方法。例如,你可以使用cURL来发送POST和DELETE请求即使我们没有提供的相关例子。比如,下载刚才上传的照片:
curl-XGET-H"X-Auth-Token:AUTH_tkf828cc87bb9348168a52619b1f7e3928"http://127.0.0.1:8080/v1/AUTH_test/photos/lzl.jpg>td_lzl.jpg
注意:一般地,你每次调用curl来执行一个操作,系统就会创建一个独立的TCP/IP和SSL连接(https)然后丢弃。然而,使用语言的APIs是设计用来重用这些在操作之间的连接,因此提供了更好的细嫩。我们推荐在你的产品应用中使用一种支持语言的APIs并且限制curl仅用来快速和简单地测试/诊断。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!