Ruby: преобразовать команду curl в Ruby net / http request - PullRequest
1 голос
/ 13 января 2020

Я хотел бы преобразовать эту команду curl из командной строки в Ruby net / http request:

curl -u user: pword --insecure -XGET "https://192.168.10.10: 3000 / _search / template? Pretty = true"-H 'Content-Type: application / json' -d '{" id ":" search_template_services "," params ": {" environment ":" прод», "start_time": "2019-01-01T00: 00: 00.000Z", "end_time": "2020-01-01T00: 00: 00.000Z", "кантоны": [ "AG"], "сервис" : "WMS", "request": "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)

Видимо, URL не правильный. Если я использую curl, он работает.

Как исправить запрос net / http?

1 Ответ

1 голос
/ 13 января 2020

Вот веб-сайт, который преобразует многие (не все) команды 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
...