APIのドキュメントには、cURLでのリクエストの方法しか載っていませんでした。
(トークンなどは、ダミーです)
curl -i -X PUT \ -H "Accept: application/json" \ -H "X-Auth-Token: 2c6f2de2126a4102b38368c32e7043db" \ https://object-storage.io/v1/nc_cc54f7476b8e444bad238a943a94ccdf/container/ \ -T file1
これをrubyで実行したいです。
そこで、curl→rubyに変換するサービスを見つけたので、
変換した結果が以下の通りです。
https://jhawthorn.github.io/curl-to-ruby/
ruby
1require 'net/http' 2require 'uri' 3 4uri = URI.parse("https://object-storage.tyo1.conoha.io/v1/nc_cc54f7476b8e444bad238a943a94ccdf/container/") 5request = Net::HTTP::Put.new(uri) 6request["Accept"] = "application/json" 7request["X-Auth-Token"] = "2c6f2de2126a4102b38368c32e7043db" 8 9req_options = { 10 use_ssl: uri.scheme == "https", 11} 12 13response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http| 14 http.request(request) 15end 16 17# response.code 18# response.body
しかし、ファイルのアップロード部分だけ変換されませんでした。
そこで、以下のように変更してみました。
ruby
1require 'net/http' 2require 'uri' 3 4uri = URI.parse("https://object-storage.tyo1.conoha.io/v1/nc_cc54f7476b8e444bad238a943a94ccdf/container/") 5request = Net::HTTP::Put.new(uri) 6request.body = File.open("image.jpg") # <- 追加 7request.content_type = "multipart/form-data" # <- 追加 8request["Accept"] = "application/json" 9request["X-Auth-Token"] = "2c6f2de2126a4102b38368c32e7043db" 10 11req_options = { 12 use_ssl: uri.scheme == "https", 13} 14 15response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http| 16 http.request(request) 17end 18 19# response.code 20# response.body
これを実行すると、以下のようなエラーが表示されました。
error
1NoMethodError (undefined method `bytesize' for #<File:0x00007f822c94ba78>)
cURLコマンドを紹介しているサイトなどにも-T
オプションは
ほとんど載っておらず(普通使わないのか?)、調べても見つかりませんでした。
ご存知の方おられましたら、
上記のcURLコマンドをrubyでリクエストが送信できるよう
代替のスクリプトを教えて欲しいです。よろしくお願いします!
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。