下面是使用curl的请求:

curl -XPOST -H content-type:application/json -d "{\"credentials\":{\"username\":\"username\",\"key\":\"key\"}}" https://auth.api.rackspacecloud.com/v1.1/auth

我一直试图用ruby提出同样的请求,但似乎无法实现.

我也试过几个图书馆,但都没用.

uri = URI.parse("https://auth.api.rackspacecloud.com")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new("/v1.1/auth")
request.set_form_data({'credentials' => {'username' => 'username', 'key' => 'key'}})
response = http.request(request)

我收到一个415不支持的媒体类型错误.

推荐答案

你很接近,但还不太接近.试试这样的方法:

uri = URI.parse("https://auth.api.rackspacecloud.com")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new("/v1.1/auth")
request.add_field('Content-Type', 'application/json')
request.body = {'credentials' => {'username' => 'username', 'key' => 'key'}}.to_json
response = http.request(request)

这将设置内容类型头,并在主体中发布JSON,而不是像代码中那样在表单数据中发布JSON.对于示例凭据,它仍然失败,但我怀疑它应该适用于其中的真实数据.

Ruby相关问答推荐

这个#divmod 方法输出这个结果是做什么的?

Homebrew 的 ruby​​ 和Homebrew Ruby有什么区别?

ActiveRecord::AdapterNotSpecified 数据库配置未指定适配器

检测安装的 CPU 数量

如何在没有继承方法的情况下获取类的公共方法?

Python 是否在 Ruby 中进行类似于字符串 #{var}的变量插值?

如何在不按 Enter 的情况下获取单个字符?

如何让 Ruby 解析时间,就好像它在不同的时区一样?

ActionController::UnknownFormat

将哈希转换为 struct

Sinatra 登录?

如何在不使用循环的情况下按数组中的计数分组

当我将参数传递给脚本时,使用 gets() 会出现没有这样的文件或目录错误

如何在 Ruby 中重命名文件?

使用整数作为哈希键

Ruby:define_method 与 def

如何从字符串创建 Ruby 日期对象?

正则表达式中的 `?i` 和 `?-i` 是什么意思?

为什么 Ruby 有 TrueClass 和 FalseClass 而不是一个布尔类?

def `self.function` 名称是什么意思?