【问题标题】:400 Error for API call Ruby on Rails App using Rest Client使用 Rest Client 的 API 调用 Ruby on Rails 应用程序出现 400 错误
【发布时间】:2017-06-20 00:21:30
【问题描述】:

我正在尝试使用供应商的 API 进行身份验证,但我不断收到 400 错误。请注意,它适用于他们的“模拟服务器”

我的代码是:

def perform(*args)
    require 'rest_client'

    values = {"email": "not_telling@hotmail.com",
      "password": ENV['PASSWORD']
    }

    headers = {
      :content_type => 'application/json',
      :accept => 'application/json'
    }

    body = begin
      RestClient.post 'https://beta.b2bapi.trevcoinc.com/api/v1/login', values, headers
      rescue => e
      e.response.body
    end
    fb_response = JSON.parse(body)

  end

我得到的回应是

{"error"=>"Email is missing!", "status"=>"400"} 

我的语法有问题吗?我不知道为什么它说电子邮件丢失。

编辑:https://beta.b2bapi.trevcoinc.com/#documentation/ 的 API 文档

【问题讨论】:

  • 好吧,你传递了一个email 参数,但除此之外,如果不知道 API 规范就很难说。至少您的请求正在通过,所以此时最好的办法是仔细检查 API 文档

标签: ruby-on-rails ruby api rest-client


【解决方案1】:

您似乎没有将 values 哈希序列化为 JSON。遗憾的是,Rest Client 不能直接理解 JSON,因此即使您设置了内容类型,它也会使用 application/x-www-form-urlencoded 编码将您的有效负载哈希编码为字符串。

您是否尝试过values.to_json? (这会显式编码为 JSON 字符串。)

【讨论】:

  • 其实我也试过了。我用 hurl.it 测试了端点,但仍然收到 500 错误。除非我把错误的东西放在身体里......
  • 嗯。是不是和以前一样的错误信息“电子邮件丢失”?你真的是说500错误吗? HTTP 状态 400 表示客户端错误,而 500 表示内部服务器错误。
【解决方案2】:

很难说问题出在哪里,也许您没有发送正确的有效负载格式/结构(我无法访问文档的链接,它提示我进行身份验证)。

当我使用 RestClient 时,我更喜欢详细的格式,这样我就可以准确地看到/控制正在发生的事情:

headers = {
  'Content-Type' => 'application/json'
}
url = "https://api.vimeo.com/me/videos"
body = {
  "some" => "content"
}
res = RestClient::Request.execute(method: :post, url: url, headers: headers, payload: body.to_json)

试试看?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    相关资源
    最近更新 更多