将curl重写为HTTP POST请求以获取访问令牌

时间:2019-03-15 06:39:22

标签: ruby-on-rails http curl post okta

我正在尝试通过在Rails中使用发布请求来获取访问令牌。我能够将这个请求写为curl,成功检索了令牌,但是当我尝试将其转换为rails时,出现了400错误。

起作用的卷曲如下。

curl -v -X POST   --url https://subdomain.okta.com/oauth2/v1/token   --header 'accept: application/json'   --header 'content-type: application/x-www-form-urlencoded'   --data 'grant_type=authorization_code&redirect_uri=https%3A%2F%2Fexample.com%2Foauth%2Fobfuscated%2Fcallback1&code=HxYy0kiN-eG1GuZ3LaYA&client_id=somecode&client_secret=anothercode'

我的产生400错误的红宝石方法如下:

theURLToGetToken = "https://subdomain.okta.com/oauth2/v1/token";
puts "URL for Token Validation"
puts theURLToGetToken

params = {
        'client_id' => AUTH['OKTA_CLIENT_ID'],
        'client_secret' => AUTH['OKTA_CLIENT_SECRET'],
        'code' => theCode,
        "grant_type" => "authorization_code",
        'redirect_uri' => "https://example.com/oath/obfuscated/callback1"
}

uri = URI.parse(theURLToGetToken)

request = Net::HTTP::Post.new(uri.path)
request["content_type"] = "application/x-www-form-urlencoded"
request["Accept"] = "application/json"
request.set_form_data(params)

req_options = {
    use_ssl: uri.scheme == "https",
}

response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
    http.request(request)
end

puts "Here's the response"
pp response

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

我不确定这里是什么问题,但是在这种情况下我要做的是:

1)找到一个可用于测试请求的虚拟网站(或创建requestbin

2)将带有curl的请求发送到您的网站并保存有关它的信息

3)使用您的代码将请求发送到您的网站

4)比较结果

希望有帮助。

答案 1 :(得分:0)

您最好使用Postman,可以从此处下载 https://www.getpostman.com/pricing

只有在与Postman正确确认api后,才最好使用rest-client,faraday或某些简洁的api客户端。