# This is a sample ruby script code for IIJ IoT Data Storage Web API. |
# For more information please refer to the manual. |
|
# require packages |
# if you do not install packages, please use 'gem' to install. |
require 'rubygems' |
require 'time' |
require 'net/http' |
require 'base64' |
require 'openssl' |
require 'xmlsimple' |
|
BASE_URL = 'https://s3api.iot.iij.jp' # not edit |
HOST = 's3api.iot.iij.jp' # not edit |
|
access_key = '' # your access key |
secret_key = '' # your secret key |
content_md5 = '' # if you upload file, you have to write. |
content_type = '' # not edit |
date = Time.now.httpdate # now date |
root = '' # if you use payload, you specify root of xml. |
# if you needed. We expect xml. |
payload2hash = {} |
payload = XmlSimple.xml_out(payload2hash, RootName: root) |
content_length = payload.length |
http_verb = 'GET' # or POST, PUT, DELETE, HEAD |
bucket_name = '/sample' # specify your bucket |
query = '' # if you needed. e.g. ?id=hoge |
canonicalized_headers = '' # if you use optional headers, you have to write. |
canonicalized_resource = bucket_name + query |
|
string2sign = http_verb + "\n" + |
content_md5 + "\n" + |
content_type + "\n" + |
date + "\n" + |
canonicalized_headers + |
bucket_name |
|
# create signature |
hmac = OpenSSL::HMAC.digest('sha1', secret_key.encode('utf-8'), string2sign.encode('utf-8')) |
signature = Base64.encode64(hmac).chomp! |
|
uri = URI(BASE_URL + canonicalized_resource) |
request = Net::HTTP::Get.new(uri.request_uri) |
# request = Net::HTTP::Post.new(uri.request_uri) |
# request = Net::HTTP::Put.new(uri.request_uri) |
# request = Net::HTTP::Delete.new(uri.request_uri) |
# request = Net::HTTP::Head.new(uri.request_uri) |
|
request['Authorization'] = "IIJGIO " + access_key + ":" + signature |
request['Content-MD5'] = content_md5 |
request['Content-Type'] = content_type |
request['Content-Length'] = content_length |
request['Date'] = date |
request['Host'] = HOST |
# request.body = payload |
|
http = Net::HTTP.new(uri.host, uri.port) |
http.use_ssl = true |
response = http.request(request) |
|
puts("Status Code: " + response.code) |
puts("Body:\n" + response.body) |