ruby 华为OceanStor Dorado API授权

kiz8lqtg  于 2023-05-06  发布在  Ruby
关注(0)|答案(1)|浏览(144)

我无法使用华为OceanStor Dorado API授权API请求。任何帮助将是伟大的。以下是我的代码。

require 'uri'
require 'openssl'
require 'net/http'
require 'http-cookie' 
STORAGE_IP = '172.31.195.186'
STORAGE_PORT ='8088'
DEVICE_ID = '2102352VVA1'
options = { "username": "admin", "password": "xxxxxxx", "scope": "0" }.to_json
base_url = "https://#{STORAGE_IP}:#{STORAGE_PORT}/deviceManager/rest/#{DEVICE_ID}/"
url = URI("#{base_url}sessions")
http = Net::HTTP.new(URI(base_url).host, URI(base_url).port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(url)
request.body = options
request['Content-Type'] = 'application/json'
response = http.request(request)
jar = HTTP::CookieJar.new
response.get_fields('set-cookie').each do |value|
 jar.parse(value, request.uri)
end
url = URI("#{base_url}license/getInActLicenseStatus")
request = Net::HTTP::Get.new(url)
request['Cookie'] = HTTP::Cookie.cookie_value(jar.cookies(url))
response = http.request(request)
response.body

最终输出为

response.body
=> "{\"data\":{},\"error\":{\"code\":-401,\"description\":\"This operation fails to be performed because of the unauthorized REST.\",\"suggestion\":\"Before performing this operation, ensure that REST is authorized.\"}}\n\n"

调试

response.get_fields('set-cookie').each do |value|
 jar.parse(value, request.uri)
end
=>["session=ismsession=88C215763D4E48068C9AC812F2C3AF80C929768D25D4FBC7049E1B2D45AB010A;path=/;httponly;secure;SameSite=Lax;"]

request['cookie'] = HTTP::Cookie.cookie_value(jar.cookies(url))
=> "session=ismsession=88C215763D4E48068C9AC812F2C3AF80C929768D25D4FBC7049E1B2D45AB010A"
gmxoilav

gmxoilav1#

正如文档中提到的,请求应该是POST,而不是GET。

相关问题