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

时间:2017-01-18 18:34:57

标签: ruby http curl

我使用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"

2 个答案:

答案 0 :(得分:1)

您必须使用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

答案 1 :(得分:0)

urlencode表示数据已在网址

中编码
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