如何使用 -X GET -G 选项将 curl 转换为 Ruby Net::HTTP



我正在使用 https://jhawthorn.github.io/curl-to-ruby/将curl命令转换为Net::HTTP代码。 但是,以下内容无法使用 jhawthorn 资源进行转换:

curl -H "Content-type: application/json" -H "Authorization: Token token=$PAGERDUTY_ACCESS_KEY" -X GET -G --data-urlencode "since=2017-01-16" --data-urlencode "until=2017-01-17"  "https://company.pagerduty.com/api/v1/schedules" 

我已经在这个github问题中描述了我的确切问题:https://github.com/jhawthorn/curl-to-ruby/issues/8

这是我目前使用 Net::HTTP gem 的函数:

#!/usr/bin/env ruby
require 'json'
require 'net/http'
require 'uri'
def get_pagerduty_hash(ending='')
  uri = URI.parse("https://company.pagerduty.com/api/v1/schedules#{ending}")
  request = Net::HTTP::Get.new(uri)
  request.content_type = "application/json"
  request["Authorization"] = "Token token=#{ENV['PAGERDUTY_ACCESS_KEY']}"
  req_options = {
    use_ssl: uri.scheme == "https",
  }
  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
    http.request(request)
  end
  return JSON.parse(response.body).to_hash 
end

如何更改此设置以正确使用原始 curl 命令的日期部分:

-X GET -G --data-urlencode "since=2017-01-16" --data-urlencode "until=2017-01-17"

您必须使用 URI.encode_www_form 函数:

#!/usr/bin/env ruby
require 'json'
require 'net/http'
require 'uri'
def get_pagerduty_hash(ending='')
  uri = URI.parse("https://company.pagerduty.com/api/v1/schedules#{ending}")
  params = { :since => '2017-01-16', :until => '2017-01-17' }
  uri.query = URI.encode_www_form(params)
  request = Net::HTTP::Get.new(uri)
  request.content_type = "application/json"
  request["Authorization"] = "Token token=#{ENV['PAGERDUTY_ACCESS_KEY']}"
  req_options = {
    use_ssl: uri.scheme == "https",
  }
  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
    http.request(request)
  end
  return JSON.parse(response.body).to_hash 
end

urlencode表示数据在 URL 中编码

url = URI.parse('http://example.com')
url.query = "since=2017-01-16&until=2017-01-17"
puts url
# => http://example.com?since=2017-01-16&until=2017-01-17

最新更新