【问题标题】:Ruby: convert curl command into Ruby net/http requestRuby:将 curl 命令转换为 Ruby net/http 请求
【发布时间】:2020-04-29 17:53:32
【问题描述】:

我想将此命令行 curl 命令转换为 Ruby net/http 请求:

curl -u 用户:pword --insecure -XGET “https://192.168.10.10:3000/_search/template?pretty=true”-H 'Content-Type:application/json' -d'{"id":"search_template_services", "参数":{"环境":"prod","start_time":"2019-01-01T00:00:00.000Z","end_time":"2020-01-01T00:00:00.000Z","cantons" :["AG"],"service":"WMS","re​​quest":"getmap"}}'

我的尝试:

endpoint = 'https://192.168.10.10:3000/_search/template/?pretty=true&id=search_template_services&environment=prod&start_time=2019-01-01T00:00:00.000Z&end_time=2020-01-01T00:00:00.000Z&cantons=AG&service=WMS&request=getmap'

puts "url: #{endpoint}"
uri = URI(endpoint)

Net::HTTP.start(uri.host, uri.port,
                use_ssl: uri.scheme == 'https',
                verify_mode: OpenSSL::SSL::VERIFY_NONE) do |http|
  request = Net::HTTP::Get.new uri.request_uri
  request.basic_auth('user', 'pword')
  @response = http.request request
end

data = JSON.parse(@response)

但我得到了错误:

/usr/lib/ruby/2.4.0/json/common.rb:156:in `initialize': 没有隐式 将 Net::HTTPBadRequest 转换为字符串 (TypeError)

显然网址不正确。如果我使用 curl 就可以了。

如何修复 net/http 请求?

【问题讨论】:

    标签: ruby net-http


    【解决方案1】:

    这是一个将许多(不是全部)curl 命令转换为 Ruby 的网站:

    http://jhawthorn.github.io/curl-to-ruby

    我通过这个运行了你的 curl 命令。生成的 Ruby 代码似乎可以运行,但由于它与私有服务器联系,我无法对其进行全面测试。代码如下:

    require 'net/http'
    require 'uri'
    require 'json'
    require 'openssl'
    
    uri = URI.parse("https://192.168.10.10:3000/_search/template?pretty=true")
    request = Net::HTTP::Get.new(uri)
    request.basic_auth("user", "pword")
    request.content_type = "application/json"
    request.body = JSON.dump({
      "id" => "search_template_services",
      "params" => {
        "environment" => "prod",
        "start_time" => "2019-01-01T00:00:00.000Z",
        "end_time" => "2020-01-01T00:00:00.000Z",
        "cantons" => [
          "AG"
        ],
        "service" => "WMS",
        "request" => "getmap"
      }
    })
    
    req_options = {
      use_ssl: uri.scheme == "https",
      verify_mode: OpenSSL::SSL::VERIFY_NONE,
    }
    
    response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
      http.request(request)
    end
    
    # response.code
    # response.body
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2021-12-05
      • 2019-08-07
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多