【问题标题】:Post request with bearer token and get access token in response with ruby [duplicate]使用不记名令牌发布请求并获取访问令牌以响应 ruby​​ [重复]
【发布时间】:2018-01-29 06:33:34
【问题描述】:

我可以使用不记名令牌访问 API,并且我在 INSOMNIA / Postman 工具中获得了具有以下值的响应:

{
    "access_token": "ki1AH9hiF8_OTGr70VnOnb-I7ZRWVI3u6pXxWHW6hStckd3WC3NLviN0Z036dvBVfEQFWO691t-9roX-p1w6gou1TlWAqEwX3mmLwcZ4VcwrS5YWY8GLSxjBCSMdcn5RLBPfh5jubNX8_vrrX3D3bTbsGnxE1jeWf_T-lnUGEkWz876o3kbonIFWwJMO8-athkcfb3kPoqOrD1w2CRyeDADFvYuPiTpbiG75a9s1V-qdgTGdYaP8-FRnm0G0zhKt8lQo2W8pBBa4dMv-5jQSEA",
    "token_type": "bearer",
    "expires_in": 14399
}

但是当我试图从 ruby​​ 脚本中得到相同的东西时,我只得到如下 200OK 的响应代码:

[1] pry(main)> response = http.request(request)
=> #<Net::HTTPOK 200 OK readbody=true>

我已经编写了以下 rake 任务以在对发布请求的响应中获取访问令牌:

require "net/http"
require "uri"

desc "post request and get response"
task :post_request_and_get_response => :environment do
  uri = URI.parse("my_url")

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE

  request = Net::HTTP::Post.new(uri.request_uri)
  request["Authorization"] = 'Bearer token'
  request["Content-Type"] = 'application/x-www-form-urlencoded'
  request.set_form_data({"grant_type" => "password", "username" => "user", "password" => "my_password"})
  p response = http.request(request)
end

请帮助我获取 access_token 以响应我在 Postman 或 Insomnia 工具中看到的发帖请求。

通过 rake 任务,我只得到 200OK 状态码。

response.body 我只得到以下值而不是 access_token

[12] pry(main)> response.body
=> "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><META HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"TEXT/HTML; CHARSET=utf-8\"/><title>Error</title></head><body><H2>Error</H2><table summary=\"Error\" border=\"0\" bgcolor=\"#FEEE7A\" cellpadding=\"0\" cellspacing=\"0\" width=\"400\"><tr><td><table summary=\"Error\" border=\"0\" cellpadding=\"3\" cellspacing=\"1\"><tr valign=\"top\" bgcolor=\"#FBFFDF\" align=\"left\"><td><STRONG>Error</STRONG></td></tr><tr valign=\"top\" bgcolor=\"#FFFFFF\"><td>This page can't be displayed. Contact support for additional information.<br/>The incident ID is: N/A.</td></tr></table></td></tr></table></body></html>"

提前致谢。

【问题讨论】:

  • 为什么我在 Insomnia/postman 工具中得到响应值而没有完成我的 rake 任务。我需要改变什么吗?请帮帮我。
  • 此问题与您标记的不重复。我的情况不同@Зелёный

标签: ruby-on-rails ruby http-post bearer-token net-http


【解决方案1】:

您可以获取响应正文并将其解析为 JSON 代码:

require 'JSON'

body = response.body
data = JSON.parse body
puts data['access_token']

希望对您有所帮助。

【讨论】:

  • 这不起作用。
  • 作为回应,我只得到这个值 => #<:httpok ok readbody="true"> 没有别的。
  • response 是一个对象,你可以在图片中看到我的简单示例。
  • 这里的问题是你的 JSON 语法错误,一定是:{ "access_token" : "xxxxxxxxxxxx" }
  • @hoangdd 请检查更新的问题。我在 Insomnia / postman 工具上得到了确切的回应。
猜你喜欢
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 2023-03-16
  • 1970-01-01
  • 2011-10-25
  • 2015-11-14
  • 1970-01-01
相关资源
最近更新 更多